Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebAPI 2,将输出流从;LimitMemoryStream“;_C#_Asp.net Web Api - Fatal编程技术网

C# WebAPI 2,将输出流从;LimitMemoryStream“;

C# WebAPI 2,将输出流从;LimitMemoryStream“;,c#,asp.net-web-api,C#,Asp.net Web Api,因此,我尝试将API中的内容流式传输到客户端,目的是尽快将数据传输到客户端。我将与另一个端点进行对话,该端点完成整个请求可能比较慢 我遇到的问题是,即使我使用StreamContent/PushStreamContent,WebAPI似乎也会缓冲我得到的任何东西,并忽略对flush的任何调用。这很烦人。我可以在那里有一个客户机可以使用的数据,而且在另一端返回数据之前可能需要很长时间,所以我希望客户机至少能够获取数据 在我的测试中,我添加了Task.Delay,用于从流中写入数据循环。根据weba

因此,我尝试将API中的内容流式传输到客户端,目的是尽快将数据传输到客户端。我将与另一个端点进行对话,该端点完成整个请求可能比较慢

我遇到的问题是,即使我使用StreamContent/PushStreamContent,WebAPI似乎也会缓冲我得到的任何东西,并忽略对flush的任何调用。这很烦人。我可以在那里有一个客户机可以使用的数据,而且在另一端返回数据之前可能需要很长时间,所以我希望客户机至少能够获取数据

在我的测试中,我添加了Task.Delay,用于从流中写入数据循环。根据webapi选择的缓冲方式,返回任何数据可能需要几分钟,即使数据在几百毫秒后写入其输出流

似乎与
HttpResponseMessage
调用
HttpContent.SerializeToStreamAsync
LimitMemoryStream
有关,我认为这决定了如何缓冲输出


webapi中是否有任何方法可以覆盖这个问题?例如,创建自己的实际响应flush的实现?

我找到了答案的核心。这篇文章谈论的是HttpClient/HttpRequestMessage,但我相信同样的事情也适用于HttpResponseMessage。您需要在请求上设置内容长度,或者将TransfernCodingChunked头设置为true。如果两者都不做,那么WebAPI必须缓冲响应,以便它可以为您计算长度。

我认为WebAPI的体系结构和工作方式(特别是管道和格式化程序)不是实现这一点的最佳工具。我认为如果你使用WCF,你不会发现这样的困难,因为WCF更适合这种工作。这似乎是一种耻辱,它的流量将类似于观看正在直播的视频,我认为webapi将适合这种情况。除了这种内部缓冲,我不知道如何重写/调整它,所有这些都工作得很好。Web API不适合这种情况。对我来说,用螺丝刀钉钉子是困难的并不是一件羞耻的事。我会用锤子代替。你为什么不在谷歌上搜索“web api流媒体”?您将发现一些使用Web API进行流式处理的示例。但我会在谷歌上搜索“wcf流媒体”或“wcf流媒体音频”以获得更具体的实现?