Поделиться через


<serviceMetadata>

Задает публикацию метаданных службы и связанных сведений.

<Конфигурации>
  <system.serviceModel>
    <Поведения>
      <serviceBehaviors>
        <Поведение>
          <serviceMetadata>

Синтаксис

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

Атрибуты и элементы

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут Описание
externalMetadataLocation Универсальный код ресурса (URI), содержащий местоположение WSDL-файла, возвращаемый пользователю в ответ на запросы WSDL и MEX, вместо автоматически создаваемых WSDL. Если атрибут не задан, по умолчанию возвращается WSDL. Значением по умолчанию является пустая строка.
httpGetBinding Строковое значение, в котором указывается тип привязки, используемой для загрузки метаданных посредством HTTP GET. Это необязательный параметр. Если он не указан, то будут использоваться привязки по умолчанию.

Поддерживаются только привязки с внутренними элементами привязки, поддерживающими IReplyChannel. Кроме этого, свойство MessageVersion привязки должно иметь значение None.
httpGetBindingConfiguration Строка, задающая имя привязки, указанной атрибутом httpGetBinding, который ссылается на дополнительные сведения конфигурации этой привязки. Такое же имя должно быть задано в разделе <bindings>.
httpGetEnabled Логическое значение, указывающее, следует ли опубликовывать метаданные службы для извлечения с помощью запроса HTTP-GET. Значение по умолчанию — false.

Если атрибут httpGetUrl не указан, адрес, по которому публикуются метаданные, - это адрес службы плюс «?wsdl». Например, если адрес службы — http://localhost:8080/CalculatorService, адрес http/get метаданных имеет значение http://localhost:8080/CalculatorService?wsdl.

Если это свойство имеет значение falseили адрес службы не основан на HTTP или HTTPS, "?wsdl" игнорируется.
httpGetUrl URI, указывающий адрес, по которому метаданные публикуются для извлечения с использованием запроса HTTP-GET. Если указан относительный URI, то он будет обрабатываться относительно базового адреса службы.
httpsGetBinding Строковое значение, в котором указывается тип привязки, используемой для загрузки метаданных посредством HTTPS GET. Это необязательный параметр. Если он не указан, то будут использоваться привязки по умолчанию.

Поддерживаются только привязки с внутренними элементами привязки, поддерживающими IReplyChannel. Кроме этого, свойство MessageVersion привязки должно иметь значение None.
httpsGetBindingConfiguration Строка, задающая имя привязки, указанной атрибутом httpsGetBinding, который ссылается на дополнительные сведения конфигурации этой привязки. Такое же имя должно быть задано в разделе <bindings>.
httpsGetEnabled Логическое значение, указывающее, следует ли опубликовывать метаданные службы для извлечения с помощью запроса HTTPS-GET. Значение по умолчанию — false.

Если атрибут httpsGetUrl не указан, адрес, по которому публикуются метаданные, - это адрес службы плюс «?wsdl». Например, если адрес службы — https://localhost:8080/CalculatorService, адрес http/get метаданных имеет значение https://localhost:8080/CalculatorService?wsdl.

Если это свойство имеет значение falseили адрес службы не основан на HTTP или HTTPS, "?wsdl" игнорируется.
httpsGetUrl URI, указывающий адрес, по которому метаданные публикуются для извлечения с использованием запроса HTTPS-GET.
policyVersion Строка, указывающая версию используемой спецификации Web Services Policy. Это атрибут типа PolicyVersion.

Дочерние элементы

Нет

Родительские элементы

Элемент Описание
<Поведение> Указывает элемент поведения.

Комментарии

Элемент конфигурации позволяет управлять возможностями публикации метаданных службы. Чтобы предотвратить непреднамеренное раскрытие потенциально конфиденциальных метаданных службы, конфигурация по умолчанию для служб Windows Communication Foundation (WCF) отключает публикацию метаданных. Такое расширение функциональности по умолчанию защищено, но это также означает, что при этом невозможно использовать средство импорта метаданных (например, Svcutil.exe) для создания клиентского кода, необходимого для вызова службы, если поведение публикации не включено явно в конфигурации. Включить такое поведение публикации для службы можно с помощью элемента конфигурации.

Подробный пример настройки этого поведения см. в разделе Поведение публикации метаданных.

Дополнительные атрибуты httpGetBinding и httpsGetBinding позволяют настроить привязки, используемые для извлечения метаданных посредством HTTP-GET (или HTTPS-GET). Если они не заданы, для извлечения метаданных применяются привязки по умолчанию (HttpTransportBindingElement для HTTP и HttpsTransportBindingElement для HTTPS). Обратите внимание, что эти атрибуты нельзя использовать вместе со встроенными привязками WCF. Поддерживаются только привязки с внутренними элементами привязки, поддерживающими IReplyChannel. Кроме этого, свойство MessageVersion привязки должно иметь значение None.

Для снижения подверженности службы действиям недобросовестных пользователей перенос можно защитить с помощью механизма SSL по протоколу HTTP (HTTPS). Для этого необходимо вначале выполнить привязку подходящего сертификата X.509 к конкретному порту компьютера, на котором размещена служба. (Дополнительные сведения см. в разделе Работа с сертификатами.) Во-вторых, добавьте этот элемент в конфигурацию службы и задайте для атрибута httpsGetEnabled значение true. После этого следует присвоить атрибуту httpsGetUrl URL-адрес конечной точки метаданных службы, как показано в следующем примере.

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

Пример

В следующем примере настраивается служба для предоставления метаданных с помощью <элемента serviceMetadata> . Здесь также настраивается конечная точка предоставления доступа к контракту IMetadataExchange как реализации протокола WS-MetadataExchange (MEX). В примере используется привязка mexHttpBinding, являющаяся удобной стандартной привязкой, эквивалентной привязке wsHttpBinding с режимом безопасности None. В конечной точке используется относительный адрес mex, который при разрешении с базовым адресом служб приводит к адресу конечной 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>

См. также раздел