Какова важность IMetadataExchange в WCF? - PullRequest
7 голосов
/ 22 октября 2009

Какова польза и значение IMetadataExchange в WCF?

У меня есть следующий файл app.config, в котором я не использую конечную точку IMetadataExchange, но я все еще могу создать свой прокси-клиент. Я прочитал, что если я не использую конечную точку IMetadataExchange, AddServiceReference не будет работать, потому что моя служба не предоставляет метаданные. Как это работает без выставления IMetadataExchange конечной точки?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metaDataBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
           <service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8090/Services/"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="WCFService.IMathOperations"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

Ответы [ 4 ]

12 голосов
/ 22 октября 2009

ArsenMkrt имеет формальный ответ. Проще говоря:

  • Если у вас его нет, добавление сервисной ссылки не будет работать
  • Вы должны удалить его с рабочих серверов, чтобы хакер не смог добавить сервисную ссылку

Чтобы ответить на ваш вопрос более конкретно, у вас есть эта линия на вашем сервисе:

       <service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">

Что указывает на эту конфигурацию

    <behavior name="metaDataBehavior">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>

Возможно, поэтому он все еще работает, хотя я подумал, что вам нужно указать конечную точку MEX.

7 голосов
/ 22 октября 2009

Интерфейс IMetadataExchange Предоставляет методы, используемые для возврата метаданных об услуге. При программировании служб Windows Communication Foundation (WCF) полезно публиковать метаданные о службе. Например, метаданные могут быть документом языка описания веб-сервисов (WSDL), который описывает все методы и типы данных, используемые сервисом. Возвращение метаданных о службе WCF позволяет потребителям службы легко создавать клиентов для службы.

6 голосов
/ 30 ноября 2010

Разница:

<serviceMetadata httpGetEnabled="true"/>

позволяет получать метаданные с использованием протокола HTTP .

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

позволяет получать метаданные с использованием протокола ws-метаданных.

Просто работает, но не все клиенты могут звонить вам (поскольку они не могут получить метаданные для создания прокси).

Стандарт должен публиковать оба.

См. Также Класс поведения метаданных службы (MSDN).

0 голосов
/ 10 августа 2014

Без IMetadataExchange служба WCF предоставляет клиенту информацию о метаданных, но WCF не гарантирует предоставление метаданных, поскольку функции WCF по умолчанию предоставляют метаданные клиенту.

Предоставление метаданных осуществляется стандартизированным способом через IMetadataExchange. Интерфейс IMetadataExchange соответствует отраслевому стандарту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...