2010-04-09 28 views
2

我有一个WCF服务托管在Win2003 SP2计算机上的IIS6上。 WCF服务正确托管,并且通过HTTP可见,并提供通常的“测试此服务,您需要创建一个客户端并使用它来调用服务”消息。但是,访问.svc?WSDL链接会导致连接重置。WCF .svc可通过HTTP访问,但访问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。你的贡献全部得票,并用橡皮软管对暗中安装记录器的开发者进行殴打

+0

您是否有推荐的清单以查看是否启用了干扰应用程序? – 2010-04-22 08:53:02

+0

我们现在要做!它与Soap日志记录HTTP处理程序中实施不当的流拷贝有关。这是在处理流之前交给它,所以网络应用程序认为它正在发送好,但浏览器得到了连接重置 – Wolfwyrd 2010-04-22 09:10:34

回答

2

你打开了Web服务的跟踪吗?这为您提供了WCF在“引擎盖下”正在做什么的详细日志。

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

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

1

我同意 - 我也很难过。据我所知,你的WCF配置看起来很好。

事情尝试:

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

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

  • 如果您从配置中删除<serviceHostingEnvironment>部分,是否会访问WSDL工作?

+0

无法使用测试客户端添加,我得到“警告:没有代码生成。如果你试图生成一个客户端,这可能是因为元数据文档没有包含任何有效的合同或服务或因为所有合同/服务被发现存在于/参考程序集中。请确认您已将所有元数据文档传递给该工具。警告:如果您想从模式生成数据合约,请确保使用/ dataContractOnly选项。“ Mex也失败了,但是还是有一些亮点:“由于目标机器主动拒绝它,所以没有连接”127.0.0.1:13949“ – Wolfwyrd 2010-04-15 14:20:43

+0

localhost:13949与本地dev服务器路径相同,所以它看起来像是丢失了某个地方 – Wolfwyrd 2010-04-15 14:21:19

1

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

同时检查部署服务器上的事件日志,以查看在尝试访问WSDL时是否有任何错误。

+0

事件日志不包含任何内容,提琴手显示请求到服务器,然后连接刚刚结束 – Wolfwyrd 2010-04-19 08:20:41