gpt4 book ai didi

c# - SoapHttpClient 协议(protocol) : get response as a stream instead of a string?

转载 作者:行者123 更新时间:2023-11-30 15:45:38 34 4
gpt4 key购买 nike

我正在使用一个 web 服务,它在一个片段中吐出非常大量的数据。响应字符串可以是 8MB 之类的。虽然在台式 PC 上不是问题,但嵌入式设备在处理 8MB 字符串对象时会发疯。

我想知道是否有办法将响应作为流获取?目前我正在使用如下方法。我尝试改用 POST 请求,但 SOAP 更方便(响应是 XML,使用 POST 我必须将纯文本回复转换回有效的 XML)并且我想坚持使用它。是否可以使用另一种不返回字符串但返回流的“调用”?有任何想法吗?

[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 网络服务客户端基础结构,那么您将受其限制。一个限制是除了反序列化数据之外,没有简单的方法来获取响应。

如果有必要,那么您可以使用分部类来覆盖 GetWebResponse返回您自己的自定义 WebResponse 的方法。后者将反过来覆盖 GetResponseStream调用基本版本的方法,使用流,然后返回包含“空”Web 请求的流(否则 .NET 将在没有内容的流上阻塞)。

您也可以通过覆盖 GetReaderForMessage 来尝试类似的操作方法。这是通过 SoapClientMessage具有 Stream 的实例您可能会使用的属性。同样,您必须将流设置为 Web 服务基础架构可以使用的内容。

执行此操作的更好方法是使用 WCF 客户端。 WCF 具有更强大且易于使用的可扩展性机制。

事实上,您甚至可能不需要扩展 WCF 客户端。您可能只需将其配置为根本不会出现此缓冲问题。

关于c# - SoapHttpClient 协议(protocol) : get response as a stream instead of a string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011823/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com