Поведение публикации метаданных
Образец поведения публикации метаданных демонстрирует, как управлять функциями публикации метаданных службы. Для предотвращения непреднамеренного разглашения потенциально важных метаданных службы, в конфигурации службы Windows Communication Foundation (WCF) публикация метаданных по умолчанию отключена. Такое расширение функциональности по умолчанию защищено, но это также означает, что при этом невозможно использовать средство импорта метаданных (например, Svcutil.exe) для создания клиентского кода, необходимого для вызова службы, если поведение публикации не включено явно в конфигурации.
![]() |
---|
Для ясности этот образец демонстрирует создание незащищенной конечной точки публикации метаданных. Такие конечные точки являются потенциально доступными для анонимных не прошедших проверку подлинности потребителей, поэтому перед развертыванием таких конечных точек следует соблюдать осторожность и убедиться, что публичное раскрытие метаданных службы уместно. См. образец Пользовательская конечная точка защищенных метаданных в качестве образца, который защищает конечную точку метаданных. |
Данный образец основан на образце Образец для начала работы, который реализует контракт службы ICalculator
. В этом образце клиентом является консольное приложение (EXE), а служба размещается в службах IIS.
![]() |
---|
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела. |
Чтобы отобразить метаданные для службы, параметр ServiceMetadataBehavior должен быть сконфигурирован в службе. При наличии такого поведения можно публиковать метаданные, конфигурируя конечную точку для предоставления контракта IMetadataExchange как реализации протокола WS-MetadataExchange (MEX). Для удобства этому контракту присвоено сокращенное имя конфигурации "IMetadataExchange". В этом образце используется привязка mexHttpBinding
, являющаяся удобной стандартной привязкой, эквивалентной wsHttpBinding
с режимом безопасности, которому присвоено значение None. Относительный адрес «mex» используется в конечной точке, которая при разрешении относительно базового адреса службы приводит к созданию адреса конечной точки https://localhost/servicemodelsamples/service.svc/mex. Ниже приводится конфигурация поведения:
<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 below. Setting httpGetEnabled to true publishes
the service's WSDL at the <baseaddress>?wsdl, for example,
https://localhost/servicemodelsamples/service.svc?wsdl -->
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
Ниже приводится описание конечной точки MEX.
<!-- 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
previously. -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
Этот образец присваивает свойству HttpGetEnabled логическое значение true, а также предоставляет метаданные службы, используя HTTP GET. Чтобы включить конечную точку метаданных HTTP GET, службе должен быть присвоен базовый HTTP-адрес. Для доступа к метаданным используется строка запроса ?wsdl
для базового адреса службы. Например, для просмотра в веб-обозрвеателе WSDL для службы используйте адрес https://localhost/servicemodelsamples/service.svc?wsdl. Кроме того, можно использовать это поведение, чтобы предоставить метаданные по протоколу HTTPS, присваивая свойству HttpsGetEnabled логическое значение true. Это потребует наличия базового HTTPS-адреса.
Чтобы получить доступ к конечной точке MEX службы, используйте средство Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe).
svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs
Это позволит создать клиент, основанный на метаданных службы.
Для доступа к метаданным службы с использованием HTTP GET укажите в веб-обозрвеателе https://localhost/servicemodelsamples/service.svc?wsdl.
При удалении этого поведения и попытке открыть службу будет получено исключение. Происходит ошибка, поскольку конечная точка, настроенная с контрактом IMetadataExchange
, не имеет реализации при отсутствии поведения.
Если свойству HttpGetEnabled
присваивается логическое значение false, будет отображена справочная страница CalculatorService вместо метаданных службы.
Настройка, построение и выполнение образца
Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.
Чтобы выполнить построение версии решения для языка C# или Visual Basic .NET, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.
Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Basic\Services\Behaviors\Metadata
|