Подтвердить что ты не робот

Что произойдет, если я установил HttpGetEnabled = false

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

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

  <serviceMetadata httpGetEnabled="false"/>

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

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

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

<serviceMetadata httpGetEnabled="false"/>

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

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

-Anil

4b9b3361

Ответ 1

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

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

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

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

Как правильно указал Joel C, привязки являются (n почти) ортогональной концепцией. Если вы разрешаете клиентам разговаривать с вами через базовый HTTP, ws HTTP, чистые именованные каналы или хрустальные шары не зависят от того, как вы публикуете свои услуги.

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

Ответ 2

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