最近我需要访问使用SOAP :: Lite创建的Web服务。使用起来非常麻烦,因为没有WSDL,它没有返回合理的数据类型等等所以我开始使用提供的示例代码。
从一开始我就遇到问题,请求超时。有时经常,有时更少但从未完全没有问题。在使用Fiddler嗅探流量并进行搜索之后,似乎有一个SOAP :: Lite的错误在处理UTF-8编码数据时搞乱了标题Content-Length。这似乎是合理的,因为我的分析指出客户端等待更多数据(内容长度)时服务器说它已完成(真实数据)导致超时。
所以现在我需要一种方法来对抗这个错误的头字段并且:
问题是,我从未有机会使用SoapExtension或任何其他修改,因为Invoke()最终会在解析开始之前抛出IoException或WebException。此外,我认为WS不是我的,而且非常不可行。
我还尝试重写SoapHttpClientProtocol.GetWebResponse()来执行异步请求,但由于在调用HttpWebRequest.EndGetResponse()之前无法获取ResponseStream,并且总是抛出异常,因此无效。
有没有人知道如何处理这个问题?
更新:到目前为止,我还尝试了WCF并遇到了this post at MSDN - 答案并不令人振奋。基本上,这在用户代码可访问的管道中发生得太深。我现在最好的选择似乎是使用Fiddler脚本来纠正Content-Length标头,这可能并不简单,因为这个WS只能通过HTTPS使用。
/丹