Хостинг WCF: Может получить доступ к svc файлу, но не может перейти к ссылке wsdl

У меня есть сервис WCF, который размещается в IIS 7.5. У меня есть два сервера, один для теста и один для производства.

Сервис хорошо работает на тестовом сервере, но на рабочем сервере у меня есть следующая ошибка.

Когда я получаю доступ к адресу http://..../service.svc Я вижу страницу по умолчанию, которая говорит:


Вы создали сервис.

Для тестирования этого сервиса необходимо будет создать клиент и использовать его для вызова сервиса. Можно сделать это использование инструмента svcutil.exe из командной строки со следующим синтаксисом:

svcutil.exe http://..../service.svc?wsdl

Это генерирует конфигурационный файл и файл кода, который содержит клиентский класс. Добавьте эти два файла к своему клиентскому приложению и используйте сгенерированный клиентский класс для вызова Сервиса.


Но когда я нажимаю на wsdl ссылку, я не могу перейти к wsdl странице. Это возвращает меня этой веб-странице по умолчанию без любых ошибок. Я подозреваю ошибку авторизации сети/брандмауэра, но у кого-либо есть опыт как этот?

Все настройки IIS являются тем же для тестовых и рабочих серверов.

Спасибо, С наилучшими пожеланиями.

18
задан Maciej Pulikowski 1 May 2018 в 14:58
поделиться

1 ответ

Вы в основном нужны три вещи, чтобы включить просмотр к вашему WSDL для службы WCF:

  1. Сервисное поведение, которое позволяет Metadata Service
  2. установить httggetenabled = True на это поведение метаданных Разрешить просмотр HTTP для этой метаданные
  3. конечной точке MEX на вашем сервисе

, поэтому ваш конфиг на стороне сервера может выглядеть что-то подобное (плюс немного больше всего):

  <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 для обмена метаданными.

15
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: