Udostępnij za pośrednictwem


<serviceMetadata>

Określa publikację metadanych usługi i skojarzonych informacji.

<Konfiguracji>
  <System.servicemodel>
    <Zachowania>
      <Servicebehaviors>
        <Zachowanie>
          <serviceMetadata>

Składnia

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

Atrybuty i elementy

W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.

Atrybuty

Atrybut Opis
externalMetadataLocation Identyfikator URI, który zawiera lokalizację pliku WSDL, który jest zwracany do użytkownika w odpowiedzi na żądania WSDL i MEX zamiast automatycznie generowanego pliku WSDL. Jeśli ten atrybut nie jest ustawiony, zwracany jest domyślny język WSDL. Wartość domyślna to pusty ciąg.
httpGetBinding Ciąg określający typ powiązania, które będzie używane do pobierania metadanych za pośrednictwem żądania HTTP GET. To ustawienie jest opcjonalne. Jeśli nie zostanie określony, zostaną użyte domyślne powiązania.

Obsługiwane będą tylko powiązania z wewnętrznymi elementami powiązania, które obsługują IReplyChannel . MessageVersion Ponadto właściwość powiązania musi mieć wartość None.
httpGetBindingConfiguration Ciąg, który ustawia nazwę powiązania określonego w atrybucie httpGetBinding , który odwołuje się do dodatkowych informacji o konfiguracji tego powiązania. Ta sama nazwa musi być zdefiniowana <bindings> w sekcji .
httpGetEnabled Wartość logiczna określająca, czy należy opublikować metadane usługi na potrzeby pobierania przy użyciu żądania HTTP/Get. Wartość domyślna to false.

Jeśli atrybut httpGetUrl nie jest określony, adres, pod którym metadane są publikowane, to adres usługi plus "?wsdl". Jeśli na przykład adres usługi to http://localhost:8080/CalculatorService, adresem metadanych HTTP/Get jest http://localhost:8080/CalculatorService?wsdl.

Jeśli ta właściwość to false, lub adres usługi nie jest oparty na protokole HTTP lub HTTPS, ciąg "?wsdl" jest ignorowany.
httpGetUrl Identyfikator URI określający adres, pod którym metadane są publikowane do pobierania przy użyciu żądania HTTP/Get. Jeśli określono względny identyfikator URI, będzie on traktowany jako względny względem adresu podstawowego usługi.
httpsGetBinding Ciąg określający typ powiązania, które będzie używane do pobierania metadanych za pośrednictwem protokołu HTTPS GET. To ustawienie jest opcjonalne. Jeśli nie zostanie określony, zostaną użyte domyślne powiązania.

Obsługiwane będą tylko powiązania z wewnętrznymi elementami powiązania, które obsługują IReplyChannel . MessageVersion Ponadto właściwość powiązania musi mieć wartość None.
httpsGetBindingConfiguration Ciąg, który ustawia nazwę powiązania określonego w atrybucie httpsGetBinding , który odwołuje się do dodatkowych informacji o konfiguracji tego powiązania. Ta sama nazwa musi być zdefiniowana <bindings> w sekcji .
httpsGetEnabled Wartość logiczna określająca, czy należy opublikować metadane usługi do pobierania przy użyciu żądania HTTPS/Get. Wartość domyślna to false.

Jeśli atrybut httpsGetUrl nie jest określony, adres, pod którym metadane są publikowane, to adres usługi plus "?wsdl". Jeśli na przykład adres usługi to https://localhost:8080/CalculatorService, adresem metadanych HTTP/Get jest https://localhost:8080/CalculatorService?wsdl.

Jeśli ta właściwość to false, lub adres usługi nie jest oparty na protokole HTTP lub HTTPS, ciąg "?wsdl" jest ignorowany.
httpsGetUrl Identyfikator URI określający adres, pod którym metadane są publikowane do pobierania przy użyciu żądania HTTPS/Get.
policyVersion Ciąg określający wersję używanej specyfikacji WS-Policy. Ten atrybut jest typu PolicyVersion.

Elementy podrzędne

Brak

Elementy nadrzędne

Element Opis
<Zachowanie> Określa zachowanie elementu.

Uwagi

Ten element konfiguracji umożliwia kontrolowanie funkcji publikowania metadanych usługi. Aby zapobiec przypadkowemu ujawnieniu potencjalnie poufnych metadanych usługi, domyślna konfiguracja usług Windows Communication Foundation (WCF) wyłącza publikowanie metadanych. To zachowanie jest domyślnie bezpieczne, ale oznacza również, że nie można użyć narzędzia importowania metadanych (takiego jak Svcutil.exe), aby wygenerować kod klienta wymagany do wywołania usługi, chyba że zachowanie publikowania metadanych usługi jest jawnie włączone w konfiguracji. Za pomocą tego elementu konfiguracji można włączyć to zachowanie publikowania dla usługi.

Szczegółowy przykład konfigurowania tego zachowania można znaleźć w temacie Zachowanie publikowania metadanych.

Opcjonalne httpGetBinding atrybuty i httpsGetBinding umożliwiają skonfigurowanie powiązań używanych do pobierania metadanych za pośrednictwem żądania HTTP GET (lub HTTPS GET). Jeśli nie zostaną określone, domyślne powiązania (HttpTransportBindingElementw przypadku protokołów HTTP i HttpsTransportBindingElement, w przypadku protokołu HTTPS) są używane do pobierania metadanych zgodnie z potrzebami. Zauważ, że nie można używać tych atrybutów z wbudowanymi powiązaniami programu WCF. Obsługiwane będą tylko powiązania z wewnętrznymi elementami powiązania, które obsługują IReplyChannel . MessageVersion Ponadto właściwość powiązania musi mieć wartość None.

Aby zmniejszyć narażenie usługi na złośliwych użytkowników, można zabezpieczyć transfer przy użyciu mechanizmu SSL za pośrednictwem protokołu HTTP (HTTPS). W tym celu należy najpierw powiązać odpowiedni certyfikat X.509 z określonym portem na komputerze hostujący usługę. (Aby uzyskać więcej informacji, zobacz Praca z certyfikatami). Po drugie dodaj ten element do konfiguracji usługi i ustaw httpsGetEnabled atrybut na true. Na koniec ustaw httpsGetUrl atrybut na adres URL punktu końcowego metadanych usługi, jak pokazano w poniższym przykładzie.

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

Przykład

Poniższy przykład umożliwia skonfigurowanie usługi w celu uwidocznienia metadanych przy użyciu <elementu serviceMetadata> . Konfiguruje również punkt końcowy w celu uwidocznienia kontraktu IMetadataExchange jako implementacji protokołu WS-MetadataExchange (MEX). W przykładzie mexHttpBindingużyto elementu , który jest wygodnym standardowym powiązaniem, które jest równoważne wsHttpBinding wartości z trybem zabezpieczeń ustawionym na Nonewartość . Względny adres "mex" jest używany w punkcie końcowym, który po rozpoznaniu względem adresu podstawowego usług powoduje wystąpienie adresu punktu końcowego 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>

Zobacz też