Partilhar via


<ServiceMetadata>

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

<configuração>
   <system.serviceModel>
     <comportamentos>
       <ServiceBehaviors>
         <comportamento>
           <ServiceMetadata>

Sintaxe

<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 seções a seguir descrevem atributos, elementos filho e elementos pai.

Attributes

Attribute Description
externalMetadataLocalização Um Uri que contém a localização de um ficheiro WSDL, que é devolvido ao utilizador em resposta a pedidos WSDL e MEX em vez do WSDL gerado automaticamente. Quando este atributo não está definido, o WSDL predefinido é devolvido. O padrão é uma cadeia de caracteres vazia.
httpGetBinding Uma cadeia que especifica o tipo de ligação que será usada para a recuperação de metadados via HTTP GET. Essa configuração é opcional. Se não for especificado, serão usadas as ligações padrão.

Apenas serão suportadas fixações com elementos de ligação internos que suportem IReplyChannel . Adicionalmente, a MessageVersion propriedade da ligação deve ser None.
httpGetBindingConfiguration Uma cadeia que define o nome da ligação especificada no httpGetBinding atributo, que faz referência à informação adicional de configuração dessa ligação. O mesmo nome deve ser definido na <bindings> secção.
httpGetEnabled Um valor booleano que especifica se deve publicar metadados do serviço para recuperação usando um pedido HTTP/Get. A predefinição é false.

Se o atributo httpGetUrl não for especificado, o endereço onde os metadados são publicados é o endereço do serviço mais um "?wsdl". Por exemplo, se o endereço de serviço for http://localhost:8080/CalculatorService, o endereço de metadados HTTP/Get é http://localhost:8080/CalculatorService?wsdl.

Se esta propriedade for false, ou o endereço do serviço não for baseado em HTTP ou HTTPS, "?wsdl" é ignorado.
httpGetUrl Um Uri que especifica o endereço onde os metadados são publicados para recuperação usando um pedido HTTP/Get. Se for especificado um Uri relativo, será tratado como relativo ao endereço base do serviço.
httpsGetBinding Uma cadeia que especifica o tipo de ligação que será usada para a recuperação de metadados via HTTPS GET. Essa configuração é opcional. Se não for especificado, serão usadas as ligações padrão.

Apenas serão suportadas fixações com elementos de ligação internos que suportem IReplyChannel . Adicionalmente, a MessageVersion propriedade da ligação deve ser None.
httpsGetBindingConfiguration Uma cadeia que define o nome da ligação especificada no httpsGetBinding atributo, que faz referência à informação adicional de configuração dessa ligação. O mesmo nome deve ser definido na <bindings> secção.
httpsGetEnabled Um valor booleano que especifica se deve publicar metadados do serviço para recuperação usando um pedido HTTPS/Get. A predefinição é false.

Se o atributo httpsGetUrl não for especificado, o endereço onde os metadados são publicados é o endereço do serviço mais um "?wsdl". Por exemplo, se o endereço de serviço for https://localhost:8080/CalculatorService, o endereço de metadados HTTP/Get é https://localhost:8080/CalculatorService?wsdl.

Se esta propriedade for false, ou o endereço do serviço não for baseado em HTTP ou HTTPS, "?wsdl" é ignorado.
httpsGetUrl Um Uri que especifica o endereço onde os metadados são publicados para recuperação usando 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 filho

Nenhum

Elementos Principais

Elemento Description
<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 evitar a divulgação não intencional de metadados de serviço potencialmente confidenciais, a configuração padrão para serviços do Windows Communication Foundation (WCF) desabilita a publicação de metadados. Este comportamento é seguro por defeito, mas também significa que não pode usar uma ferramenta de importação de metadados (como Svcutil.exe) para gerar o código do 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. Usando este elemento de configuração, pode ativar este comportamento de publicação para o seu serviço.

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

O opcional httpGetBinding e httpsGetBinding os atributos permitem-lhe configurar as ligações usadas para a recuperação de metadados via HTTP GET (ou HTTPS GET). Se não forem especificados, as ligações padrão (HttpTransportBindingElement, no caso de HTTP e HttpsTransportBindingElement, no caso de HTTPS) são usadas para a recuperação de metadados, conforme apropriado. Repare que não pode usar estes atributos com as ligações WCF incorporadas. Apenas serão suportadas fixações com elementos de ligação internos que suportem IReplyChannel . Adicionalmente, a MessageVersion propriedade da ligação deve ser None.

Para reduzir a exposição de um serviço a usuários mal-intencionados, é possível proteger a transferência usando o mecanismo SSL sobre HTTP (HTTPS). Para fazer isso, você deve primeiro vincular um certificado X.509 adequado a uma porta específica no computador que está hospedando o serviço. (Para mais informações, consulte Trabalhar com Certificados.) Em segundo lugar, adicione este elemento à configuração do serviço e defina o httpsGetEnabled atributo para true. Por fim, defina o httpsGetUrl atributo como a URL do ponto de extremidade de metadados do serviço, conforme mostrado no exemplo a seguir.

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

Example

O exemplo seguinte configura um serviço para expor metadados usando o <elemento serviceMetadata> . Também configura um endpoint para expor o IMetadataExchange contrato como uma implementação de um protocolo WS-MetadataExchange (MEX). O exemplo usa o mexHttpBinding, que é uma ligação padrão de conveniência equivalente ao wsHttpBinding com o modo de segurança definido para None. Um endereço relativo de "mex" é usado no endpoint, que, quando resolvido em relação ao endereço base do serviço, resulta num endereço endpoint 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>

Consulte também