<serviceMetadata>

Especifica a publicação de metadados de serviço e informações associadas.

<configuração>
  <system.serviceModel>
    <comportamentos>
      <serviceBehaviors>
        <comportamento>
          <serviceMetadata>

Syntax

<serviceMetadata externalMetadataLocation="String"
                 httpGetBinding="String"
                 httpGetBindingConfiguration="String"
                 httpGetEnabled="Boolean"
                 httpGetUrl="String"
                 httpsGetBinding="String"
                 httpsGetBindingConfiguration="String"
                 httpsGetEnabled="Boolean"
                 httpsGetUrl="String"
                 policyVersion="Policy12/Policy15" />

Atributos e Elementos

As secções seguintes descrevem atributos, elementos subordinados e elementos principais.

Atributos

Atributo Descrição
externalMetadataLocation Um Uri que contém a localização de um ficheiro WSDL, que é devolvido ao utilizador em resposta aos pedidos WSDL e MEX em vez do WSDL gerado automaticamente. Quando este atributo não está definido, é devolvido o WSDL predefinido. A predefinição é uma cadeia vazia.
httpGetBinding Uma cadeia que especifica o tipo de enlace que será utilizado para a obtenção de metadados através de HTTP GET. Esta definição é opcional. Se não for especificado, serão utilizados os enlaces predefinidos.

Apenas serão suportados enlaces com elementos de enlace internos suportados IReplyChannel . Além disso, a MessageVersion propriedade do enlace tem de ser None.
httpGetBindingConfiguration Uma cadeia que define o nome do enlace especificado no httpGetBinding atributo, que faz referência às informações de configuração adicionais deste enlace. O mesmo nome tem de ser definido na <bindings> secção.
httpGetEnabled Um valor booleano que especifica se pretende publicar metadados de serviço para obtenção com um pedido HTTP/Obter. A predefinição é false.

Se o atributo httpGetUrl não for especificado, o endereço no qual os metadados são publicados é o endereço do serviço e um "?wsdl". Por exemplo, se o endereço do serviço for http://localhost:8080/CalculatorService, o endereço http/obter metadados é http://localhost:8080/CalculatorService?wsdl.

Se esta propriedade for false, ou se o endereço do serviço não for baseado em HTTP ou HTTPS, "?wsdl" é ignorado.
httpGetUrl Um Uri que especifica o endereço no qual os metadados são publicados para obtenção com um pedido HTTP/Get. Se for especificado um Uri relativo, será tratado em relação ao endereço base do serviço.
httpsGetBinding Uma cadeia que especifica o tipo de enlace que será utilizado para a obtenção de metadados através de HTTPS GET. Esta definição é opcional. Se não for especificado, serão utilizados os enlaces predefinidos.

Apenas serão suportados enlaces com elementos de enlace internos suportados IReplyChannel . Além disso, a MessageVersion propriedade do enlace tem de ser None.
httpsGetBindingConfiguration Uma cadeia que define o nome do enlace especificado no httpsGetBinding atributo, que faz referência às informações de configuração adicionais deste enlace. O mesmo nome tem de ser definido na <bindings> secção.
httpsGetEnabled Um valor booleano que especifica se pretende publicar metadados de serviço para obtenção com um pedido HTTPS/Get. A predefinição é false.

Se o atributo httpsGetUrl não for especificado, o endereço no qual os metadados são publicados é o endereço do serviço e um "?wsdl". Por exemplo, se o endereço do serviço for https://localhost:8080/CalculatorService, o endereço http/obter metadados é https://localhost:8080/CalculatorService?wsdl.

Se esta propriedade for false, ou se o endereço do serviço não for baseado em HTTP ou HTTPS, "?wsdl" é ignorado.
httpsGetUrl Um Uri que especifica o endereço no qual os metadados são publicados para obtenção com um pedido HTTPS/Get.
policyVersion Uma cadeia que especifica a versão da especificação WS-Policy que está a ser utilizada. Este atributo é do tipo PolicyVersion.

Elementos Subordinados

Nenhuma

Elementos Principais

Elemento Descrição
<comportamento> Especifica um elemento de comportamento.

Observações

Este elemento de configuração permite-lhe controlar as funcionalidades de publicação de metadados de um serviço. Para impedir a divulgação não intencional de metadados de serviço potencialmente confidenciais, a configuração predefinida dos serviços do Windows Communication Foundation (WCF) desativa a publicação de metadados. Este comportamento é seguro por predefinição, mas também significa que não pode utilizar uma ferramenta de importação de metadados (como Svcutil.exe) para gerar o código de cliente necessário para chamar o serviço, a menos que o comportamento de publicação de metadados do serviço esteja explicitamente ativado na configuração. Com este elemento de configuração, pode ativar este comportamento de publicação para o seu serviço.

Para obter um exemplo detalhado de configuração deste comportamento, veja Comportamento de Publicação de Metadados.

Os atributos e httpsGetBinding opcionais httpGetBinding permitem-lhe configurar os enlaces utilizados para a obtenção de metadados através de HTTP GET (ou HTTPS GET). Se não forem especificados, os enlaces predefinidos (HttpTransportBindingElementno caso de HTTP e HttpsTransportBindingElement, no caso de HTTPS) são utilizados para obtenção de metadados conforme adequado. Tenha em atenção que não pode utilizar estes atributos com os enlaces WCF incorporados. Apenas serão suportados enlaces com elementos de enlace internos suportados IReplyChannel . Além disso, a MessageVersion propriedade do enlace tem de ser None.

Para reduzir a exposição de um serviço a utilizadores maliciosos, é possível proteger a transferência com o mecanismo SSL através de HTTP (HTTPS). Para tal, primeiro tem de vincular um certificado X.509 adequado a uma porta específica no computador que aloja o serviço. (Para obter mais informações, consulte Trabalhar com Certificados.) Em segundo lugar, adicione este elemento à configuração do serviço e defina o httpsGetEnabled atributo como true. Por fim, defina o httpsGetUrl atributo para o URL do ponto final de metadados de serviço, conforme mostrado no exemplo seguinte.

<behaviors>
  <serviceBehaviors>
    <behavior name="NewBehavior">
      <serviceMetadata httpsGetEnabled="true"
                       httpsGetUrl="https://myComputerName/myEndpoint" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Exemplo

O exemplo seguinte configura um serviço para expor metadados com o <elemento serviceMetadata> . Também configura um ponto final para expor o IMetadataExchange contrato como uma implementação de um protocolo WS-MetadataExchange (MEX). O exemplo utiliza o mexHttpBinding, que é um enlace padrão de conveniência que é equivalente ao wsHttpBinding com o modo de segurança definido como None. É utilizado um endereço relativo de "mex" no ponto final, que quando resolvido em relação ao endereço base dos serviços resulta num endereço de ponto final de http://localhost/servicemodelsamples/service.svc/mex.

<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by the host: http://localhost/servicemodelsamples/service.svc -->
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex
             To expose the IMetadataExchange contract, you must enable the serviceMetadata behavior as demonstrated below. -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <!-- The serviceMetadata behavior publishes metadata through the IMetadataExchange contract. When this behavior is
               present, you can expose this contract through an endpoint as shown above. Setting httpGetEnabled to true publishes
               the service's WSDL at the <baseaddress>?wsdl eg. http://localhost/servicemodelsamples/service.svc?wsdl -->
          <serviceMetadata httpGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Ver também