У меня есть сервис WCF, который размещается в IIS 7.5. У меня есть два сервера, один для теста и один для производства.
Сервис хорошо работает на тестовом сервере, но на рабочем сервере у меня есть следующая ошибка.
Когда я получаю доступ к адресу http://..../service.svc
Я вижу страницу по умолчанию, которая говорит:
Вы создали сервис.
Для тестирования этого сервиса необходимо будет создать клиент и использовать его для вызова сервиса. Можно сделать это использование инструмента svcutil.exe из командной строки со следующим синтаксисом:
svcutil.exe http://..../service.svc?wsdl
Это генерирует конфигурационный файл и файл кода, который содержит клиентский класс. Добавьте эти два файла к своему клиентскому приложению и используйте сгенерированный клиентский класс для вызова Сервиса.
Но когда я нажимаю на wsdl ссылку, я не могу перейти к wsdl странице. Это возвращает меня этой веб-странице по умолчанию без любых ошибок. Я подозреваю ошибку авторизации сети/брандмауэра, но у кого-либо есть опыт как этот?
Все настройки IIS являются тем же для тестовых и рабочих серверов.
Спасибо, С наилучшими пожеланиями.
Вы в основном нужны три вещи, чтобы включить просмотр к вашему WSDL для службы WCF:
, поэтому ваш конфиг на стороне сервера может выглядеть что-то подобное (плюс немного больше всего):
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetadataBehavior" name="YourService">
<endpoint address=""
binding="basicHttpBinding"
contract="IYourService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
точки 1 и 2 обрабатываются этой строкой Здесь:
<serviceMetadata httpGetEnabled="true" />
Вы должны ссылаться на то, что поведение услуг в вашем
тег, чтобы она была активной.
Точка 3 (конечная точка Mex) Это раздел здесь:
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
для HTTP, используйте MEXHTTPBINDING
, а IMETADADATATAEEXCHANGE
Contract является системным контрактом WCF для обмена метаданными.