给定一个异步控制器:
public class MyController : AsyncController
{
[NoAsyncTimeout]
public void MyActionAsync() { ... }
public void MyActionCompleted() { ... }
}
Run Code Online (Sandbox Code Playgroud)
假设MyActionAsync开始一个需要几分钟的过程.如果用户现在进入MyAction操作,浏览器将等待连接打开.如果用户关闭其浏览器,则关闭连接.是否有可能检测到服务器上何时发生这种情况(最好是在控制器内)?如果是这样,怎么样?我尝试过压倒,OnException但在这种情况下永远不会发生.
注意: 我非常感谢下面的有用答案,但这个问题的关键方面是我正在使用AsyncController.这意味着HTTP请求仍然是打开的(它们像COMET或BOSH一样长寿),这意味着它是一个实时套接字连接.为什么在此实时连接终止时(即"通过对等方重置连接",TCP RST数据包)不能通知服务器?