【问题标题】:WCF .svc Accessible Over HTTP But Accessing WSDL Causes "Connection Was Reset"WCF .svc 可通过 HTTP 访问,但访问 WSDL 会导致“连接已重置”
【发布时间】:2010-04-09 11:35:41
【问题描述】:

我有一个 WCF 服务,它托管在 Win2003 SP2 机器上的 IIS6 上。 WCF 服务托管正确,并且通过 HTTP 可见,给出通常的“要测试此服务,您需要创建一个客户端并使用它来调用服务”消息。但是访问 .svc?WSDL 链接会导致连接被重置。

服务器本身在日志中为 WSDL 请求返​​回 200,此处显示了一个示例,第一个调用获得连接重置,第二个调用成功调用 .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。为您的贡献全面投票,并用橡胶软管殴打偷偷安装记录器的开发人员

【问题讨论】:

  • 您是否有推荐的清单来查看是否启用了干扰应用程序?
  • 我们现在就做!它与 Soap 日志记录 HTTP 处理程序上实现不佳的流副本有关。这是在发送流之前对其进行处理,因此 Web 应用程序认为它发送正常,但浏览器重置了连接

标签: .net wcf web-services wsdl


【解决方案1】:

您是否打开了 Web 服务的跟踪?这为您提供了有关 WCF 在“幕后”所做的详细日志。

尝试按照MSDN article 中的描述为您的服务启用跟踪,在“部署或调试的推荐设置”部分下。

生成跟踪文件后,您可以使用 SvcTraceViewer.exe(通常位于 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin 之类的目录下)查看它。

【讨论】:

    【解决方案2】:

    我同意 - 我也很难过。据我所知,您的 WCF 配置看起来还不错。

    要尝试的事情:

    • 您可以使用WCF Test Client 使用/IntegrationService.svc 地址访问您的服务吗?

    • 您可以使用测试客户端使用/IntegrationService.svc/mex 地址访问您的服务吗?

    • 如果您从配置中删除 &lt;serviceHostingEnvironment&gt; 部分,访问 WSDL 是否有效?

    【讨论】:

    • 无法使用测试客户端添加,我收到“警告:未生成代码。如果您尝试生成客户端,这可能是因为元数据文档不包含任何有效的合同或“ Mex 也失败了,但有一些亮点:“无法建立连接,因为目标机器主动拒绝了它 127.0.0.1:13949”
    • localhost:13949 与本地开发服务器的路径相同,因此它看起来好像在某处丢失了一些东西
    【解决方案3】:

    您可以尝试安装Fiddler 并查看HTTP 流量吗?也许这会对问题有所启发。

    当您尝试访问 WSDL 时,还要检查已部署服务器上的事件日志以查看它是否有任何错误。

    【讨论】:

    • 事件日志不包含任何内容,fiddler 显示请求到服务器然后连接就结束了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2013-05-18
    • 1970-01-01
    • 2012-10-13
    • 2023-04-09
    • 2011-02-10
    • 2022-11-28
    相关资源
    最近更新 更多