C# WebService调用,缓冲区太小(异步?)

3
我有一个ASP.NET Web API项目,它调用了一个用Delphi编写的服务。这个连接很完美,直到我从服务获取的数据流变得太大(Delphi服务只是从数据库中读取了一些数据,所以它们之间没有发送文件)。
现在,我已经增加了MaxBufferSize,但在某些时候它变得荒谬了,现在我正在寻找更复杂的解决方案。因此,我遇到了异步(我的Delphi服务中的每个方法也都可以作为异步方法使用,感谢Microsoft)。但即使我将我的函数调用设置为异步,当数据流大于设置的缓冲区大小时,我仍然会遇到错误(实际上我没有收到错误,执行只停止在await GetData处)。
那么,有没有可能以块的形式处理我从服务接收到的数据?例如,我设置数据流的最大大小,并且该函数持续获取,直到我获取所有数据?
谢谢
1个回答

1

Async与缓冲区大小或流处理无关。

那么,有没有可能以块的形式处理我从服务中获取的数据?

是的,这正是您需要的。我所知道的所有Web服务API都支持流处理。WCF和HttpClient肯定支持。搜索“httpclient stream response”等内容应该会让您开始。

据我所知,根据给出的信息,不需要使用异步IO。


但我不是直接通过http进行操作。我有服务对象(已嵌入我的项目中),可以通过该对象访问函数。所以您的意思是,对于这种特殊情况,我将不得不重写我的服务连接,并且不能使用服务对象,而必须切换到http(客户端)并手动进行SOAP调用? - user3466562
你现在正在使用WCF吗?WCF支持流式传输。 - usr
就像我说的那样,我刚刚使用了将服务添加到我的项目中的可能性(右键单击->将服务引用添加到我的项目中)。我假设在幕后使用了WCF,但在这种特殊情况下,当我添加我的服务(它是用Delphi编写的)时,我有一个服务对象,我用它来访问我的函数。但根据你所说的,我将不得不手动进行这些调用,以便我可以使用流式传输(当我连接服务到我的项目时,我没有看到此选项在服务对象上)。 - user3466562
好的,“Service References”正在使用WCF。如果您想要避免缓冲,则需要使用流传输。搜索“wcf streaming”以了解如何操作。这应该可以解决您的问题。解决方法是分多个调用,每次调用少量数据,或者将数据“离线”传输,例如使用文件。 - usr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接