中止请求时 IIS/C# 中会发生啥

Posted

技术标签:

【中文标题】中止请求时 IIS/C# 中会发生啥【英文标题】:What happens in IIS/C# when a request is aborted中止请求时 IIS/C# 中会发生什么 【发布时间】:2012-07-06 04:46:55 【问题描述】:

所以我正在考虑一种功能,用户粘贴链接,服务器端代码抓取提供的链接并以该链接的内容(例如页面标题、描述、缩略图等)进行响应。

用户可以同时更改链接,并且在这样做时,应该在客户端中止 ajax 请求。

我想知道 IIS 服务器中究竟发生了什么,特别是我的 C# 代码。

响应线程是否终止? Response 对象现在返回 null,还是 Response.Write 抛出异常? 是否在响应线程中抛出异常,不管它在哪里? (那个甚至没有意义,但无论如何)

【问题讨论】:

【参考方案1】:

如果服务器代码检查Response.IsClientConnected的状态,它可以停止工作并在客户端中止请求时产生一个空响应,否则它将照常完成请求。

请求处理不会因为没有人再等待而自动中止。服务器代码必须主动检查请求的状态。

【讨论】:

【参考方案2】:

您的网络服务器不知道客户端取消了请求。请求仍将得到满足,并将发回响应。您编写的客户端脚本需要能够处理页面的当前状态。

如果您确定自己不关心响应,我建议您在客户端中止请求:

xhr.abort()

【讨论】:

那么我的网络服务器的代码执行完成了吗?那么,中止请求有什么意义呢? 所以一个 Ajax 请求通常有两个步骤(简化)。 1. 启动请求。 2. 对响应做一些事情(成功或失败回调)。如果您中止请求,那么您的回调方法将不必处理响应。【参考方案3】:

如果您在写入响应之前关闭连接客户端,则会引发错误说明。当响应从服务器返回时,您可以选择不处理它。

【讨论】:

【参考方案4】:

一旦将请求发布到服务器,IIS 将开始执行服务器端代码。现在服务器可以决定是否需要执行代码。

在整个页面周期中,您可以检查Guffa提到的Request.IsClientConnected并终止执行。

但是是的,这完全取决于您的场景。

希望对你有帮助。

【讨论】:

以上是关于中止请求时 IIS/C# 中会发生啥的主要内容,如果未能解决你的问题,请参考以下文章

如果发生错误,中止 webtest

jQuery 中止请求

中止上一个后无法发出新的获取请求

当用户中止我的脚本时,cURL会话会发生什么?

如何中止Ember Data发出的HTTP请求?

发出请求时出错:请求被中止:无法创建 SSL/TLS 安全通道