代码之家  ›  专栏  ›  技术社区  ›  Wolfwyrd

svc可通过HTTP访问,但访问WSDL会导致“连接被重置”

  •  2
  • Wolfwyrd  · 技术社区  · 16 年前

    我有一个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中,它可以通过本地dev服务器正常工作,但在部署之后失败。进一步的信息,目标机器没有防火墙(它在内部网络上),日志显示站点认为200个OK响应就可以了。我也尝试过用我的服务的完整URL更新端点,但是仍然没有什么区别。

    我已经研究了其他一些选项—手动创建一个单独的WSDL并通过元数据属性公开它(由于维护问题,我真的不想这样做)。

    如果有人能提供任何关于这个或任何其他解决办法的想法,将不胜感激。

    谢谢大家的帮助。通过跟踪和头对台接口的组合,发现开发服务器上安装了一个日志应用程序,该应用程序干扰了响应,并在服务器上初始接收后强制关闭流。这是由于客户端的连接重置,而服务器的连接重置为200。所有人都投票支持你的贡献,并用一根橡皮管殴打暗中安装记录器的开发人员

    3 回复  |  直到 16 年前
        1
  •  2
  •   Eric Eijkelenboom    16 年前

    您是否打开了web服务的跟踪?这将为您提供有关WCF在“引擎盖下”所做工作的详细日志。

    MSDN article ,位于“部署或调试的建议设置”部分下。

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

        2
  •  1
  •   marc_s MisterSmith    16 年前

    尝试事项:

    • 你能用这个吗 WCF Test Client /IntegrationService.svc 地址?

    • /IntegrationService.svc/mex 地址?

    • <serviceHostingEnvironment> 你的配置中的部分?

        3
  •  1
  •   Chris O    16 年前

    你能试着安装吗 Fiddler 以及监视HTTP流量?也许这会让问题变得更清楚。