<serviceMetadata>
Задает публикацию метаданных службы и связанных сведений.
Иерархия схемы
<system.serviceModel>
<варианты поведения>
<serviceBehaviors>
<behavior> для <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. Этот параметр является необязательным. Если она не задана, то будут использоваться привязки по умолчанию. Поддерживаются только привязки с внутренними элементами привязки, поддерживающими T:System.ServiceModel.Channels.IReplyChannel. Помимо этого, свойство привязки the P:System.ServiceModel.Channels.MessageVersion должно иметь значение P:System.ServiceModel.Channels.MessageVersion.None. |
httpGetBindingConfiguration |
Строка, задающая имя привязки, указанной атрибутом httpGetBinding, который ссылается на дополнительные сведения конфигурации этой привязки. Такое же имя должно быть задано в разделе <bindings>. |
httpGetEnabled |
Логическое значение, указывающее, следует ли опубликовывать метаданные службы для извлечения с помощью запроса HTTP-GET. Значение по умолчанию — false. Если атрибут httpGetUrl не указан, адрес, по которому публикуются метаданные, — это адрес службы плюс «?wsdl». Например, если адрес службы — "https://localhost:8080/CalculatorService", то адрес метаданных HTTP/Get будет иметь вид "https://localhost:8080/CalculatorService?wsdl". Если это свойство имеет значение false или адрес службы не основан на HTTP или HTTPS, суффикс «?wsdl» не учитывается. |
httpGetUrl |
URI, указывающий адрес, по которому метаданные публикуются для извлечения с использованием запроса HTTP-GET. |
httpsGetBinding |
Строковое значение, в котором указывается тип привязки, используемой для загрузки метаданных посредством HTTPS GET. Этот параметр является необязательным. Если она не задана, то будут использоваться привязки по умолчанию. Поддерживаются только привязки с внутренними элементами привязки, поддерживающими T:System.ServiceModel.Channels.IReplyChannel. Помимо этого, свойство привязки the P:System.ServiceModel.Channels.MessageVersion должно иметь значение P:System.ServiceModel.Channels.MessageVersion.None. |
httpsGetBindingConfiguration |
Строка, задающая имя привязки, указанной атрибутом httpsGetBinding, который ссылается на дополнительные сведения конфигурации этой привязки. Такое же имя должно быть задано в разделе <bindings>. |
httpsGetEnabled |
Логическое значение, указывающее, следует ли опубликовывать метаданные службы для извлечения с помощью запроса HTTPS-GET. Значение по умолчанию — false. Если атрибут httpsGetUrl не указан, адрес, по которому публикуются метаданные, — это адрес службы плюс «?wsdl». Например, если адрес службы — "https://localhost:8080/CalculatorService", то адрес метаданных HTTPS/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) для создания клиентского кода, необходимого для вызова службы, если поведение публикации не включено явно в конфигурации. Включить такое поведение публикации для службы можно с помощью элемента конфигурации.
Подробный пример кода, иллюстрирующий настройку такого поведения, представлен в разделе Metadata Publishing Behavior.
Дополнительные атрибуты httpGetBinding и httpsGetBinding позволяют настроить привязки, используемые для извлечения метаданных посредством HTTP-GET (или HTTPS-GET). Если они не заданы, для извлечения метаданных применяются привязки по умолчанию (HttpTransportBindingElement для HTTP и HttpsTransportBindingElement для HTTPS). Обратите внимание, что эти атрибуты нельзя использовать вместе со встроенными привязками WCF. Поддерживаются только привязки с внутренними элементами привязки, поддерживающими IReplyChannel. Кроме этого, свойство MessageVersion привязки должно иметь значение None.
Для снижения подверженности службы действиям недобросовестных пользователей перенос можно защитить с помощью механизма SSL по протоколу HTTP (HTTPS). Для этого необходимо вначале выполнить привязку подходящего сертификата X.509 к конкретному порту компьютера, на котором размещена служба. (Дополнительные сведения см. в разделе Working with Certificates.) Затем необходимо добавить этот элемент в конфигурацию службы и задать атрибуту 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» используется в конечной точке, которая при разрешении относительно базового адреса службы приводит к созданию адреса конечной точки https://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: https://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- the mex endpoint is exposed at https://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. https://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
См. также
Справочник
ServiceMetadataPublishingElement
ServiceMetadataBehavior