Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В примере метаданных показано, как управлять функциями публикации метаданных службы. Чтобы предотвратить непреднамеренное раскрытие потенциально конфиденциальных метаданных службы, конфигурация по умолчанию для служб Windows Communication Foundation (WCF) отключает публикацию метаданных. Это поведение безопасно по умолчанию, но также означает, что вы не можете использовать средство импорта метаданных (например, Svcutil.exe) для создания клиентского кода, необходимого для вызова службы, если в конфигурации не включено поведение публикации метаданных службы.
Это важно
Для ясности в этом примере показано, как создать незащищенную конечную точку публикации метаданных. Такие конечные точки потенциально доступны анонимным неавторентированным потребителям и должны быть приняты меры, прежде чем развертывать такие конечные точки, чтобы обеспечить общедоступное раскрытие метаданных службы. В качестве примера, как защитить конечную точку метаданных, смотрите пользовательскую безопасную конечную точку метаданных.
Пример основан на руководстве по началу работы, которое реализует ICalculator контракт службы. В этом примере клиентом является консольное приложение (.exe), а служба хостится с помощью Internet Information Services (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, установив для этого значение HttpsGetEnabledtrue. Для этого требуется базовый адрес 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 вместо метаданных службы.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.