捕获长时间运行的POST VB.net MVC4的开始

捕获长时间运行的POST VB.net MVC4的开始,vb.net,asp.net-mvc-4,Vb.net,Asp.net Mvc 4,我的控制器里有一个子程序 <HttpPost> Sub Index(Id, varLotsOfData) 'Point B. 'By the time it gets here - all the data has been accepted by server. 子索引(Id,varLotsOfData) “B点。 '当它到达这里时,所有数据都已被服务器接受。 我想做的是捕获入站邮件的Id并标记,例如,一条数据库记录说“IDXX正在接收数据” POST接收可能需要很长时间

我的控制器里有一个子程序

<HttpPost>
Sub Index(Id, varLotsOfData)

'Point B. 
'By the time it gets here - all the data has been accepted by server.

子索引(Id,varLotsOfData)
“B点。
'当它到达这里时,所有数据都已被服务器接受。
我想做的是捕获入站邮件的Id并标记,例如,一条数据库记录说“IDXX正在接收数据”

POST接收可能需要很长时间,因为有大量数据

当执行到达B点时,我可以将记录标记为“所有接收的数据”

在哪里可以放置这种类型的“预发布完成”代码

我应该补充一点——我们从我们无法控制的客户端接收POST数据——也就是说,很可能是客户端的服务器发送数据——而不是我们从Web服务器提供的webbrowser客户端

更新:这看起来比我想象的更复杂


我认为一个可能的解决方案是以编程方式检查IIS中的工作进程。通过IIS管理器,您可以执行此操作,例如-

创建自定义操作筛选器

动作过滤器,用于在调用动作方法之前或之后执行过滤逻辑。动作过滤器是自定义属性,提供声明性方法,将动作前和动作后行为添加到控制器的动作方法中

具体来说,您需要查看

  • OnActionExecuted–在执行控制器操作后调用此方法
以下是几个链接:

这是一个实验室,但我想是C#

根据您的描述,您希望在客户端页面上显示该方法正在执行,并且您还可以显示加载gif,当执行完成时,您将向用户显示一条消息,说明执行已完成

答案很简单:使用信号器

在这里你可以找到一些参考资料


希望这将帮助您

如果我正确理解您的目标,它听起来像HttpRequest.GetBufferlessInputStream可能值得一看。它允许您立即开始对传入的post数据进行“分段”操作,而不是等到收到整个post

摘自:

…提供了使用InputStream属性的替代方法,InputStream属性将等待整个请求被接收。相反,GetBufferlessInputStream方法立即返回流对象。您可以使用该方法在接收实体的完整内容之前开始处理实体实体,并以块的形式异步读取请求实体。如果请求上载大文件,并且您希望在上载完成之前开始访问文件内容,则此方法非常有用


因此,您可以抓住文章的开头,如果面向客户的页面在传输开始时发送ID,您可以将其拉出。当然,这将读取需要解码的原始字节数据,以便您可以获取入站邮件的ID。还有一种方法允许对流进行分段读取,但也将在完全接收后构建一个完整的请求对象进行处理。

这很好,但不幸的是,在这个用例中,我们不能控制客户端。它来自用户自己的服务器。
OnActionExecuting
似乎是一个更好的选择-但是在测试中,只有在服务器接收到所有POST数据后才会触发它。