我正在使用一种网络服务,它可以一次性输出大量数据。响应字符串可能约为 8MB。虽然在台式电脑上这不是问题,但嵌入式设备在处理 8MB 字符串对象时会发疯。
我想知道是否有办法以流的形式获取响应?目前我正在使用如下方法。我尝试使用 POST 请求,但 SOAP 更方便(响应是 XML,对于 POST,我必须将纯文本回复转换回有效的 XML),我想坚持使用它。是否可以使用不同类型的“Invoke”,它不会返回字符串而是流?有任何想法吗?
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("MyAPI/MyMethod", RequestNamespace="MyAPI", ResponseNamespace="MyAPI", ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use=System.Web.Services.Description.SoapBindingUse.Literal)]
public string MyMethod(string sID)
{
object[] results = this.Invoke("MyMethod", new object[] { sID });
return ((string)(results[0]));
}
如果您使用旧的 ASMX Web 服务客户端基础设施,那么您就会受到其限制。一个限制是,除了反序列化数据之外,没有简单的方法来获取响应。
如果有必要,那么您可以使用分部类来覆盖GetWebResponse http://msdn.microsoft.com/en-us/library/8415zzb7.aspx返回您自己的自定义方法WebResponse
。后者将反过来覆盖GetResponseStream http://msdn.microsoft.com/en-us/library/system.net.webresponse.getresponsestream.aspx方法来调用基本版本,使用流,然后返回包含“空”Web 请求的流(否则 .NET 将因没有内容的流而阻塞)。
您也可以通过覆盖来尝试类似的操作GetReaderForMessage http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soaphttpclientprotocol.getreaderformessage.aspx方法。这是通过一个SoapClientMessage http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapclientmessage.aspx实例有一个Stream http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapmessage.stream.aspx您可能能够使用的财产。同样,您必须将流设置为 Web 服务基础设施可以使用的内容。
更好的方法是使用 WCF 客户端。 WCF 具有更强大且易于使用的扩展机制。
事实上,您甚至可能不需要扩展 WCF 客户端。您可能只需将其配置为根本不存在此缓冲问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)