Хостинг WCF: может получить доступ к файлу SVC, но не может перейти по ссылке wsdl - PullRequest
18 голосов
/ 20 января 2010

У меня есть служба WCF, размещенная в IIS 7.5. У меня есть два сервера, один для тестирования и один для производства.

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

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


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

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

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

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


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

Все настройки IIS одинаковы для тестовых и производственных серверов.

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

Ответы [ 4 ]

16 голосов
/ 03 сентября 2014

была такая же проблема. я исправил это, добавив httpsGetEnabled к поведению serviceBehaviors>, например:

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>

Может быть, это поможет кому-то еще. не думайте, что вам нужен этот совет после 4 лет =)

14 голосов
/ 20 января 2010

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

  1. поведение службы, которое включает метаданные службы
  2. установить httpGetEnabled = 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" />

Вам нужно указать поведение службы в вашем теге <service>, чтобы оно стало активным.

Точка 3 (конечная точка MEX) - вот этот раздел:

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

Для http используйте mexHttpBinding, а контракт IMetadataExchange является системным контрактом WCF для обмена метаданными.

2 голосов
/ 29 августа 2017

Я знаю, что ответ так поздно, но у меня была та же проблема, и решение было:

Добавьте теги [ServiceContract] и [OperationContract] на интерфейсе, который реализован в службе .svc. Visual Studio создает интерфейс, когда вы выбираете WCF Service, но я удалил интерфейс и создал свой собственный интерфейс.

[ServiceContract]
public interface IService1
{
    [OperationContract]
    void DoWork();
}

Я надеюсь помочь кому-нибудь.

0 голосов
/ 01 января 2015

Да, проблема связана с публикацией метаданных. Просто добавив еще один совет. Вы также можете добавить метаданные службы, используя код, например:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;

host.Description.Behaviors.Add(smb);

Подробнее здесь: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx

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