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,所以这不是连接问题(我认为)。

同样的代码在另一台计算机上运行良好,只是生产计算机遇到了这个问题。你知道如何解决这个问题吗?

SoapHttpClientProtocol连接问题疑难解答

您可以启用网络跟踪,将跟踪日志附加到问题中会很有帮助。

好吧,终于解决了这个问题,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文件夹中删除,并让所有东西都正常运行。

好吧,这就是我很久以来见过的最奇怪的虫子的故事。