SoapHttpClientProtocol连接问题疑难解答
本文关键字:疑难解答 问题 连接 SoapHttpClientProtocol | 更新日期: 2023-09-27 17:57:47
在生产服务器上使用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另一个端点时,它可以工作,甚至可以远程登录到端口80,所以这不是连接问题(我认为)。
同样的代码在另一台计算机上运行良好,只是生产计算机遇到了这个问题。你知道如何解决这个问题吗?
您可以启用网络跟踪,将跟踪日志附加到问题中会很有帮助。
好吧,终于解决了这个问题,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客户端进行未经验证的连接。
只需从bin文件夹中删除Mono.Security.dll即可立即解决问题。
我不知道为什么需要Mono.Security.dll,也不知道它做了什么扰乱了SOAP,也不明白为什么我可以把它从bin文件夹中删除,并让所有东西都正常运行。
好吧,这就是我很久以来见过的最奇怪的虫子的故事。