在生产服务器上使用SOAP客户端时出现超时:
System.Net.WebException: The request timed out
at System.Net.HttpWebRequest.GetRequestStream () [0x00000] in <filename unknown>:0
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (System.String method_name, System.Object[] parameters) [0x00000] in <filename unknown>:0 当尝试从该计算机ping另一个端点时,它可以工作,甚至telnet到端口80也可以工作,所以这不是一个连接问题(我认为)。
同样的代码在另一台计算机上运行得很好,只是在生产环境中遇到了这个问题。有什么想法可以解决这个问题吗?
发布于 2011-05-27 19:08:42
好了,终于解决了这个问题,16个小时后,我想到了这个。它足够奇怪,令人费解,也很奇怪,值得在这里为后人撰写一篇文章:
第1步:
创建一个web项目,该项目引用一个引用npgsql.dll (而后者又引用Mono.Security.dll )的类库。在web项目中添加web服务引用,并在某些页面中使用它。
SOAP客户端现在可以正常工作
步骤2: (这花了10个小时才分离出来)
在引用的类库中添加一个Class1.cs,并使该类使用来自npgsql.dll的类,然后在您的web项目中使用该类,但在从不使用代码的地方使用。
SOAP客户端现在因超时而崩溃
在16个小时的大部分时间里,从未被调用过的代码怎么会改变SOAP客户端的行为呢?
应答
当引用npgsql.dll中的类时(即使代码从未被调用),npgsl.dll和Mono.Security.dll被复制到bin文件夹中。
由于某种未知的原因,Mono.Security.dll阻止SOAP客户端建立未经认证的连接。
只需将Mono.Security.dll从bin文件夹中删除即可解决此问题。
我不知道为什么需要Mono.Security.dll,或者它做了什么会弄乱SOAP,或者为什么我可以从bin文件夹中删除它,并让一切正常运行。
这就是我很久以来见过的最奇怪的虫子的故事。
发布于 2011-05-26 21:00:53
您可以启用Network Tracing,将跟踪日志附加到问题将是有帮助的。
https://stackoverflow.com/questions/6138738
复制相似问题