当一个请求被中止时,IIS/C#会发生什么?

11

我在考虑一个功能,用户粘贴一个链接,服务器端代码会爬取该链接并响应该链接的内容(如页面标题、描述、缩略图等)。

与此同时,用户可以更改链接,这样做的话,Ajax请求应该在客户端被取消。

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

  • 响应线程是否终止?
  • Response对象现在是否返回null,还是Response.Write会抛出异常?
  • 如果响应线程中抛出异常,它会在任何地方抛出吗?(这个甚至没有意义,但无所谓)
4个回答

4
如果服务器代码检查Response.IsClientConnected的状态,当客户端中止请求时,它可以停止工作并生成空响应,否则它将像往常一样完成请求。
请求处理不会自动中止,仅因为没有人再等待它。服务器代码必须主动检查请求的状态。

2

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

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

xhr.abort()

1
那么我的Web服务器代码会被完整执行吗?那么中途中止请求有什么意义呢? - bevacqua
1
通常,Ajax请求有两个步骤(简化版)。1. 发起请求。2. 对响应进行处理(成功或失败回调)。如果您中止请求,则您的回调方法将不必处理响应。 - Justin Helgerson

0

如果在响应被写入之前客户端关闭连接,将会抛出一个指明此事的错误。当从服务器返回响应时,您可以选择不处理它。


0
一旦请求被发送到服务器,IIS将开始执行服务器端代码。现在,服务器可以决定是否需要执行该代码。 在整个页面周期中,您可以检查Guffa提到的Request.IsClientConnected并终止执行。 但是,这完全取决于您拥有的场景。 希望它有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接