WCF .svc доступен через HTTP, но доступ к WSDL вызывает «соединение было сброшено» - PullRequest
2 голосов
/ 09 апреля 2010

У меня есть служба WCF, которая размещена на IIS6 на компьютере с Win2003 SP2. Служба WCF правильно размещается и отображается через HTTP, давая обычное сообщение «Чтобы протестировать эту службу, вам необходимо создать клиент и использовать его для вызова службы». Однако доступ к ссылке .svc? WSDL приводит к сбросу соединения.

Сам сервер возвращает 200 в журналах для запроса WSDL, пример которого показан здесь, первый вызов получает сброс соединения, второй - успешный вызов файла .svc.

2010-04-09 11:00:21 W3SVC6 MACHINENAME 10.79.42.115 GET /IntegrationService.svc wsdl 80 - 10.75.33.71 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+InfoPath.1;+.NET+CLR+3.0.04506.30;+MS-RTC+LM+8;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;) - - devsitename.mydevdomain.com 200 0 0 0 696 3827
2010-04-09 11:04:10 W3SVC6 MACHINENAME 10.79.42.115 GET /IntegrationService.svc - 80 - 10.75.33.71 HTTP/1.1 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-GB;+rv:1.9.1.9)+Gecko/20100315+Firefox/3.5.9+(.NET+CLR+3.5.30729) - - devsitename.mydevdomain.com 200 0 0 3144 457 265

Мой Web.Config выглядит так:

<system.serviceModel>
    <serviceHostingEnvironment >
        <baseAddressPrefixFilters>
            <add prefix="http://devsitename.mydevdomain.com" />
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    <behaviors>
        <serviceBehaviors>
            <behavior name="My.Service.IntegrationServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="My.Service.IntegrationServiceBehavior" name="My.Service.IntegrationService">
            <endpoint address="" binding="wsHttpBinding" contract="My.Service.Interfaces.IIntegrationService"  bindingConfiguration="NoSecurityConfig" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
    </services>
    <bindings>
        <wsHttpBinding>
            <binding name="NoSecurityConfig">
                <security mode="None" />
            </binding>                      
        </wsHttpBinding>
    </bindings>
</system.serviceModel>

Я в значительной степени озадачен этим. Он хорошо работает через локальный сервер разработки в VS2008, но не удается после развертывания. Для получения дополнительной информации целевой компьютер не имеет брандмауэра (он находится во внутренней сети), и журналы показывают, что сайт считает, что он в порядке с 200 ответами OK. Я также попытался обновить конечную точку, указав полный URL-адрес службы, однако это все равно не имеет значения.

Я рассмотрел некоторые другие варианты - создание отдельного WSDL вручную и предоставление его через свойства метаданных (на самом деле не хочу этого делать из-за проблем с обслуживанием).

Если кто-то может высказать какие-либо соображения по поводу этого или любых других обходных путей, это будет с благодарностью.

РЕДАКТИРОВАТЬ - Разрешение: Спасибо всем за помощь. С помощью комбинации трассировки и сопряжения между устройствами было обнаружено, что на сервере разработки установлено приложение ведения журнала, которое мешает ответу и вынуждает закрывать поток после первоначального получения на сервере. Это прозвучало как Сброс подключения для клиента, но 200 для сервера. Всему голосованию за ваш вклад и избиение резиновым шлангом для разработчика, который тайно установил регистратор

Ответы [ 3 ]

2 голосов
/ 19 апреля 2010

Включили ли вы трассировку для веб-службы? Это дает вам подробные журналы о том, что WCF делает «под капотом».

Попробуйте включить трассировку для своей службы, как описано в этой статье MSDN в разделе «Рекомендуемые параметры для развертывания или отладки».

После того, как вы сгенерировали файл трассировки, вы можете просмотреть его с помощью SvcTraceViewer.exe (обычно он находится в папке C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin).

1 голос
/ 17 апреля 2010

Можете ли вы попробовать установить Fiddler и наблюдать за трафиком HTTP? Возможно, это поможет пролить свет на проблему.

Также проверьте журнал событий на развернутом сервере, чтобы узнать, есть ли на нем ошибки при попытке доступа к WSDL.

1 голос
/ 09 апреля 2010

Согласен - я тоже в тупике. Насколько я могу судить, ваш конфиг WCF выглядит просто отлично.

Что попробовать:

  • можете ли вы использовать Тестовый клиент WCF для доступа к вашим услугам по адресу /IntegrationService.svc?

  • можете ли вы использовать тестовый клиент для доступа к вашему сервису по адресу /IntegrationService.svc/mex?

  • работает ли доступ к WSDL, если вы удалили раздел <serviceHostingEnvironment> из вашей конфигурации?

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