Что произойдет, если я установлю HttpGetEnabled = false - PullRequest
14 голосов
/ 15 апреля 2011

Я запутался с концепцией публикации метаданных.

Если в файле конфигурации службы WCF я написал:

  <serviceMetadata httpGetEnabled="false"/>

Неважно, правда это или нет. Когда я попытался дать ссылку на службу в клиентском приложении с помощью «Добавить ссылку на службу ...» и нажал «Обнаружить», я смог получить ссылку на службу.

Но когда убраны следующие две строки: -

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

<serviceMetadata httpGetEnabled="false"/>

Теперь после этого, когда я попытался дать ссылку в клиентском приложении с помощью «Добавить ссылку на службу ....» и нажал «Обнаружить», я НЕ смог получить ссылку на службу ... .

Теперь кто-нибудь может сказать мне, что именно это значит. Почему после установки False он все еще позволяет установить ссылку. И почему после удаления этих строк он не позволяет установить ссылку.

-Anil

Ответы [ 2 ]

21 голосов
/ 03 мая 2011

MEX и WSDL - две разные схемы, чтобы рассказать потенциальным клиентам о структуре вашего сервиса. Таким образом, вы можете сделать ваши сервисные контракты общедоступными как «формат обмена метаданными» (MEX) или как « язык описания веб-сервисов » (WSDL) - последний доступен через HTTP (s).

Таким образом, для генерации прокси вам нужна информация метаданных. Когда вы удаляете строку serviceMetadata, вы говорите, что не предоставляете метаданные в формате WSDL.

Но строка, предшествующая публикации ваших метаданных в MEX, все еще активна, поэтому вы можете сгенерировать прокси из этих метаданных.

Из этого, естественно, следует, что когда вы не предоставляете ни WSDL, ни MEX-форматированной информации, вы не можете сгенерировать прокси.

Как правильно заметил Джоэл С., привязки являются (почти) ортогональным понятием. Разрешаете ли вы клиентам общаться с вами по обычному HTTP, через HTTP, сетевые именованные каналы или хрустальные шары, совсем не зависит от того, как вы публикуете свои услуги.

Проект руководства по безопасности WCF и / или MS "практики и шаблоны" для безопасности WCF может дать более глубокое понимание.

5 голосов
/ 15 апреля 2011

Вы добавляете ссылку на сервис, который генерирует прокси на основе Metadata Exchange (mex). Конфигурация httpGetEnabled позволяет вам установить конечную точку http, которая позволяла бы генерировать не мексиканский прокси-сервер с использованием WSDL, например, устаревший прокси-сервер веб-службы .NET. Это разные протоколы, управляемые разными настройками. Я полагаю, что если бы вы имели <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/SampleService?wsdl"/>, вы могли бы добавить ссылку на веб-сервис из .NET 2.0, что вы не смогли бы сделать, используя конфигурацию <serviceMetadata httpGetEnabled="false"/>.

...