C# 接收多部分响应,并在收到后立即处理每个部分

C# 接收多部分响应,并在收到后立即处理每个部分,c#,asp.net-web-api,webclient,C#,Asp.net Web Api,Webclient,当前情况:一个我无法控制的现有SQL Server存储过程在大约30秒内(每个数据集大约3秒)在不同的结果集中返回10个大字符串。从存储过程中获取所有字符串后,收集这些字符串的现有ASP.NET Web API控制器方法仅返回一个响应。当客户端接收到响应时,处理字符串并显示结果还需要30秒,从请求启动到操作完成总共需要1分钟 预期的改进:一旦从SqlDataReader获得了每个字符串,就以某种方式将其传输给客户端,这样客户端可以在接收后续字符串的同时解释每个字符串。因此,从请求启动到完成的总时

当前情况:一个我无法控制的现有SQL Server存储过程在大约30秒内(每个数据集大约3秒)在不同的结果集中返回10个大字符串。从存储过程中获取所有字符串后,收集这些字符串的现有ASP.NET Web API控制器方法仅返回一个响应。当客户端接收到响应时,处理字符串并显示结果还需要30秒,从请求启动到操作完成总共需要1分钟

预期的改进:一旦从SqlDataReader获得了每个字符串,就以某种方式将其传输给客户端,这样客户端可以在接收后续字符串的同时解释每个字符串。因此,从请求启动到完成的总时间将大约减少一半


我已经考虑过我可以使用的方法,例如和,但是我觉得没有一种方法是可行的,并且通常认为我走错了方向,因此提出了这个问题。我有各种各样的想法,比如将字符串保存到服务器上的临时文件中,并通过并行信号器通道将每个文件名发送给客户端,以便客户端并行请求,等等。,但是我觉得我会失去我的时间和你启发我的机会。

我不会求助于使用“服务器推送”方法来颠倒标准的客户机/服务器关系。您所需要的只是某种中介数据集。它可以是服务器上的单个对象(或多个对象,每个客户端一个),也可以是实际数据库中的另一个表(可能是NoSql)

关键是客户端不会直接访问您正在处理的缓慢数据流。相反,客户端将只访问中间数据集。在第一个请求中,您将开始将数据从慢速数据集迁移到中间数据库的过程,客户机必须等待第一批数据准备就绪

然后,客户将在处理其端的每个结果时提出额外的请求。如果已经有更多的中间结果可用,他将立即获得这些结果,否则他将不得不像第一次请求时那样等待


但服务器一直在等待缓慢的数据集,并向中间数据集添加更多数据。您必须有一种方法来标记中间数据是否已发送到客户端。您可能希望为代码生成一个单独的线程,将数据从慢速数据源移动到中间数据源。

这具有一个线程的所有特征。请后退一步,从用户的角度,用具体的术语描述您试图解决的实际问题。收到-编辑问题。。。