2012-02-02 27 views
6

我已经写在从Windows 2008 IIS ColdFusion服务器消耗的网络服务C#中的WinForms应用项目。所有Web服务调用都成功了,但其中一个失败,约有50%的时间出现以下错误:错误使用Web服务:一个现有的连接强行关闭

System.InvalidOperationException未被用户代码处理 消息= XML文档(1254,7)中存在错误。

用的内异常:

的InnerException信息:System.IO.IOException 消息=无法读取从传输连接数据:一个现有的连接被强行关闭远程主机。

我检查了我的IIS日志,并得到一个503错误(Service Unavailable)和一个64位的IIS代码(指定的网络不再可用)。任何建议都会很棒。

我运行SOAP UI我的web服务,我得到以下错误:

javax.net.ssl.SSLException:连接已关闭:javax.net.ssl.SSLException:java.net.SocketException异常:连接重置

此代码在一家公司工作正常,但此错误几乎每次都会为我目前正在使用的这家公司弹出。

+0

检查Windows事件日志,尤其是应用程序日志。顺便说一下,这些服务是在Coldfusion中编写的? – 2012-02-02 18:45:40

+0

与此问题相关的事件日志中没有错误或其他任何内容。这些服务是用Coldfusion编写的。 – 2012-02-02 21:04:26

+0

您是否联系了Web服务的供应商?这听起来像是一个问题,不一定在消费应用程序中。 – 2012-02-05 07:10:23

回答

0

我没有得到类似的错误和原因是XML序列化异常。天色如果XmlSerializer的尝试读一些财产和获得方法抛出一个异常,由于已经关闭了一些数据库连接或任何资源不可用。

你有没有尝试登录内部Global.asax中的错误事件异常?

有时如果global.asax不会引发错误事件,那么只能通过响应过滤器记录错误。您可以在web.config中添加自定义响应滤波器,在其中您将能够分析很多XML是如何正确系列化,它可能会失败。

http://msdn.microsoft.com/en-us/library/aa479332.aspx

http://www.raboof.com/projects/elmah/

+0

什么是Global.asax的?这不是一个ASP.net程序。我将如何去添加一个自定义响应过滤器到web.config? – 2012-02-06 16:35:22

+0

我已经加入了相关的链接 – 2012-02-06 18:11:07

1

如果您正在使用WCF客户端连接到服务,符合以下配置您的客户端应用程序,使服务跟踪记录:

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" 
         switchValue="Error" 
         propagateActivity="true"> 
      <listeners> 
       <add name="sdt" 
         type="System.Diagnostics.XmlWriterTraceListener" 
         initializeData= "ErrorTrace.svclog" 
         /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

下载Windows SDK和你有这些日志文件一个很好的跟踪查看器。它可以帮助您深入了解WCF通信中的错误。

+0

不幸的是我使用的WinForms(这是以前的程序)。 WinForms是否有任何跟踪功能? – 2012-02-06 21:52:14

+0

您仍然可以使用WCF客户端从的WinForms内 - 即如果你在.NET 3.0或更高版本。 – 2012-02-06 23:03:33

1

使用跨平台通信有时会发生(曾经发生过我的代码)抛出的异常并不是真正描述内部发生的事情。

此例外的一个原因是您的响应时间比webservice方法完成所需的时间稍短。所以试着增加app.config中的超时时间。

如果不起作用,您的情况可能有两个可能的问题。

  1. 如果使用SSL,则SSL证书有效性存在问题。
  2. 在XML中使用了一些无效字符,例如您的平台不支持Unicode字符,并且在XML中使用了一些不支持的字符。

但我希望只是增加超时将解决这个问题。

0

中间语“现有的连接被远程主机强行关闭”,只有一个目标听起来像是网络问题。

尝试从您试图访问的服务器和两个位置的相关防火墙获取日志。 您可以运行FiddlerNetMon/WireShark/Ethereal进一步诊断。

0

连接关闭发生在任何情况下。确保服务器和客户端上的超时时间充裕,确保您要返回的数据中没有递归。循环参考。序列化在这种情况下非常重要,因为事物在返回时被序列化。

做一个WCF示踪并检查答案。服务器中的任何故障都会关闭连接。如果服务器需要用户名,请确保它们是正确的。照顾SSL错误。使用WCF客户端来测试服务。

0

这可能是在黑暗中拍摄,但这里是我的理论:

的第一个错误是发生在一个贫穷的异常的Web服务端被抛出,也许一些无效的数据正在传递到服务?这可能会返回有关XML格式错误的错误。我会做几个测试用例来查看哪些数据被传入服务以及导致问题的原因。

第二个错误我曾经在某种情况下看到过有关Web服务异常被抛出的问题以及围绕服务使用语句的try catch。这种逻辑组合导致了早期退出,没有清理。

0

尝试用你目前的公司来检查现有的协议,在你的上家公司,并比较他们,我的意思是TCP/IP,...

3

我最近消费WCF,WebService时,得到了类似的消息。在我的情况下,它变成 是服务器端的配置错误。也许有一些东西配置不同 在这种情况发生在你身上的一台服务器上? 我的问题是,默认的最大邮件大小在服务器上配置为太小 ,并导致相同的强制连接关闭。有一个默认的 最大邮件大小,以避免DOS攻击...

0

检查IIS中的应用程序池回收配置。例如,当“私有内存限制”设置为一个值(比如100mb),然后w3wp进程超过了这个限制,这会导致应用程序池被回收时,我看到了这个错误。

这通常不是问题,因为任何现有连接都有时间完成,并且新连接将由最近启动的应用程序池处理。

如果所有的连接都没有关机的时间限制,但(通常为90秒),然后他们被IIS死亡,客户端可能会提高“一个现有的连接被强行关闭”的错误之内关闭。

0

我不知道这是适用于OP的具体情况,但是这可能帮助别人现在在这里谁到达。此异常的一个潜在原因涉及不匹配的安全协议。如果你调用服务器需要TLS 1.2和你使用ASP.net的旧版本(< = 4.0版本),你将使用较旧的安全协议,除非你改变它,让您的来电。您可以强制ASP.net使用TLS 1.2(如下所示)。这可以在任何地方的应用程序来完成,但我把它只是调用需要TLS 1.2的Web服务前行:

using System.Net; 

... 

//Enable TLS 1.2 
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

// Call the Web Service that requires TLS 1.2 
相关问题