Compartilhar via


<serviceMetadata>

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

<configuração>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <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 seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
externalMetadataLocation Um Uri que contém o local de um arquivo WSDL, que é retornado ao usuário em resposta a solicitações WSDL e MEX em vez do WSDL gerado automaticamente. Quando esse atributo não é configurado, o WSDL padrão é retornado. O padrão é uma cadeia de caracteres vazia.
httpGetBinding Uma cadeia de caracteres que especifica o tipo de associação que será utilizada para recuperação de metadados via HTTP GET. Essa configuração é opcional. Se não for especificado, as associações padrão serão usadas.

Somente serão suportadas associações com elementos de associação interna compatíveis com IReplyChannel. Além disso, a propriedade MessageVersion da associação deve ser None.
httpGetBindingConfiguration Uma cadeia de caracteres que define o nome da associação especificada no atributo httpGetBinding, que faz referência às informações de configuração adicionais dessa associação. O mesmo nome deve ser definido na seção <bindings>.
httpGetEnabled Um valor booliano que especifica se os metadados de serviço devem ser publicados para recuperação usando uma solicitação HTTP/Get. O padrã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 mais um "?wsdl". Por exemplo, se o endereço do serviço for http://localhost:8080/CalculatorService, o endereço de metadados HTTP/Get será 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" será ignorado.
httpGetUrl Um URI que especifica o endereço em que os metadados são publicados para recuperação usando uma solicitação HTTP/Get. Se um Uri relativo for especificado, ele será tratado como relativo ao endereço base do serviço.
httpsGetBinding Uma cadeia de caracteres que especifica o tipo de associação que será utilizada para recuperação de metadados via HTTPS GET. Essa configuração é opcional. Se não for especificado, as associações padrão serão usadas.

Somente serão suportadas associações com elementos de associação interna compatíveis com IReplyChannel. Além disso, a propriedade MessageVersion da associação deve ser None.
httpsGetBindingConfiguration Uma cadeia de caracteres que define o nome da associação especificada no atributo httpsGetBinding, que faz referência às informações de configuração adicionais dessa associação. O mesmo nome deve ser definido na seção <bindings>.
httpsGetEnabled Um valor booliano que especifica se os metadados de serviço devem ser publicados para recuperação usando uma solicitação HTTPS/Get. O padrã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 mais um "?wsdl". Por exemplo, se o endereço do serviço for https://localhost:8080/CalculatorService, o endereço de metadados HTTP/Get será 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" será ignorado.
httpsGetUrl Um URI que especifica o endereço em que os metadados são publicados para recuperação usando uma solicitação HTTPS/Get.
policyVersion Uma cadeia de caracteres que especifica a versão da especificação WS-Policy sendo usada. Esse atributo é do tipo PolicyVersion.

Elementos filho

Nenhum

Elementos pai

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

Comentários

Esse elemento de configuração permite que você controle os recursos 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 os serviços WCF (Windows Communication Foundation) desabilita a publicação de metadados. Esse comportamento é seguro por padrão, mas também significa que não é possível usar uma ferramenta de importação de metadados (como o Svcutil.exe) para gerar o código cliente necessário para chamar o serviço, a menos que o comportamento de publicação de metadados do serviço esteja explicitamente habilitado na configuração. Usando esse elemento de configuração, você pode habilitar esse comportamento de publicação para seu serviço.

Para obter um exemplo detalhado de configuração desse comportamento, consulte Comportamento de publicação de metadados.

Os atributos opcionais httpGetBinding e httpsGetBinding permitem que você configure as associações usadas para recuperação de metadados por meio de HTTP GET (ou HTTPS GET). Se eles não forem especificados, as ligações padrão (HttpTransportBindingElement, no caso de HTTP e HttpsTransportBindingElement, no caso de HTTPS) serão usadas para recuperação de metadados conforme apropriado. Você não pode usar esses atributos com as associações internas do WCF. Somente serão suportadas associações com elementos de associação interna compatíveis com IReplyChannel. Além disso, a propriedade MessageVersion da associaçã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 por HTTP (HTTPS). Para isso, primeiro você deve associar um certificado X.509 adequado a uma porta específica no computador que está hospedando o serviço. (Para obter mais informações, consulte Como trabalhar com certificados.) Em segundo lugar, adicione esse elemento à configuração do serviço e defina o atributo httpsGetEnabled como true. Por fim, defina o atributo httpsGetUrl como a URL do ponto de extremidade de metadados de serviço, conforme mostrado no exemplo a seguir.

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

Exemplo

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

Confira também