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