3

我正在尝试使用已使用 Soap::Lite (Perl) 创建的 Web 服务。我正在使用 C# 使用该服务。在大多数情况下,它工作正常。我可以抓取响应并在我认为合适的时候解析它们。但是,我有某些电话不起作用。

我收到以下消息:“现有连接被远程主机强行关闭”

据我了解,服务器可能出于某种原因切断了连接。我正在努力寻找那个原因。我认为这是由于某些响应的详细信息的大小而发生的。我特别有一个总是会失败,当我从 SOAP 响应中查看 XML 时,它总是在完全相同的位置被截断,就好像它到达那个位置并达到了大小限制一样。

所以,我已经做了我能想到的关于客户端大小的所有事情,例如更改 MaxReceivedMessageSize 和超时设置等。我注意到我可以增加超时并且执行时间随之增加,但是我正在做的诊断日志记录总是停在同一个地方。

我还编写了一个允许我查看原始 XML 的类,并且它再次停在同一个位置。

我在想也许服务器上的某些东西需要改变,但我尝试过的一切都不起作用。该服务托管在运行 IIS 6 的 Web 服务器上。

有人对我在客户端和/或服务器端可以做什么有任何建议吗?

谢谢

编辑


我应该注意没有可供我使用的 WSDL 文件。我正在使用的应用程序是我唯一一次使用 SOAP::Lite 并且据我所知它不会生成 WSDL。

@e36M3 - 感谢您的建议。我从未听说过soapUI。我安装了它并试用了它,我可以看到它的许多用途,所以我会记住它以备将来使用。不幸的是,它似乎是围绕 WSDL 测试构建的,如果不提供 WSDL,我无法看到如何使用它进行测试,考虑到这种特殊情况,这是一个问题。


这是我的跟踪记录中的一些相关数据。它以无效 xml 结束的位置开始,以错误信息结束。

System.Net 详细信息:0:[5772] 000031E0 ;/map>.</data
System.Net 详细信息:0:[5772] 000031E0 >。System.Net 详细信息:0:[5772] 000031E0 esp1:MRWebServic
System.Net 详细信息:0:[5772] 000031E0 es__getIssueDeta
System.Net 详细信息:0:[5772] 000031E0 ilsResponse> System.Net 详细信息:0:[5772] 000031E0 AP-ENV:Body> System.Net Verbose: 0: [5772] 000031E0 AP-ENV:Envelope>
System.Net Verbose: 0: [5772] Exiting ConnectStream#15566556::Read() -> 12880#12880<br/ > System.Net 详细:0:[5772] ConnectStream#15566556::Read()
System.Net.Sockets 详细:0:[5772] Socket#20784002::Receive()
System.Net.Sockets 错误:0:[5772] Socket#20784002::Receive 中的异常 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机无法连接响应
System.Net.Sockets 详细:0:[5772] 退出 Socket#20784002::Receive() -> 0#0
System.Net.Sockets 详细:0:[5772] Socket#20784002::Dispose()
System.Net错误:0:[5772] HttpWebRequest#63722612 中的异常:: - 底层连接已关闭:接收时发生意外错误。System.Net 详细:0:[5772] ConnectStream#15566556::Close()
System.Net 详细:0:[5772] 退出 ConnectStream#15566556::Close()

4

1 回答 1

1

在 app.exe.config 中的 Web 服务绑定中,应该设置接收到的最大消息大小。默认值为 maxReceivedMessageSize="65536"。增加该值应该允许客户端应用程序接收所有数据。

于 2011-05-13T15:31:57.147 回答