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


Поведение публикации метаданных

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

ms751498.Important(ru-ru,VS.100).gif Примечание
Для ясности этот образец демонстрирует создание незащищенной конечной точки публикации метаданных. Такие конечные точки являются потенциально доступными для анонимных не прошедших проверку подлинности потребителей, поэтому перед развертыванием таких конечных точек следует соблюдать осторожность и убедиться, что публичное раскрытие метаданных службы уместно. См. образец Пользовательская конечная точка защищенных метаданных в качестве образца, который защищает конечную точку метаданных.

Данный образец основан на образце Образец для начала работы, который реализует контракт службы ICalculator. В этом образце клиентом является консольное приложение (EXE), а служба размещается в службах IIS.

ms751498.note(ru-ru,VS.100).gifПримечание
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.

Чтобы отобразить метаданные для службы, параметр 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 вместо метаданных службы.

Настройка, построение и выполнение образца

  1. Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.

  2. Чтобы выполнить построение версии решения для языка C# или Visual Basic .NET, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.

  3. Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.

ms751498.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\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