gpt4 book ai didi

asp.net - 在 asp.net 上处理 XMLHttpRequest 中止

转载 作者:行者123 更新时间:2023-12-04 05:23:43 24 4
gpt4 key购买 nike

我使用异步 XMLHttpRequest 来调用 ASP.net Web 服务中的函数。
当我在 XMLHttpRequest 上调用 abort 方法时,在服务器收到请求并处理它之后,服务器继续处理请求。
有没有办法停止服务器上的请求处理?

最佳答案

一般来说,不,一旦服务器启动,您就无法停止服务器正在处理的请求。毕竟,服务器如何知道请求何时被中止?

就像您导航到一个网页,但在第一个网页加载之前浏览到另一个网页。至少在某种程度上(当然不会发生任何客户端工作),该初始请求将得到满足。

如果您确实希望停止服务器上长时间运行的操作,则需要对正在调用的服务进行架构以使其能够支持被中断。一些伪代码:

void MyLongRunningMethod(opId, args)
{
work = GetWork(args)

foreach(workItem in work)
{
DoWork(workItem)

//Has this invocation been aborted?
if(LookUpSet.Contains(opId))
{
LookUpSet.Remove(opId)
return
}
//Or try this:
if(Response.IsClientConnected)
{
HttpContext.Current.Response.End();
return;
}
}
}

void AbortOperation(opId)
{
LookUpSet[opId] = true
}

所以这里的想法是 MyLongRunningMethod定期检查它是否已中止,如果已中止,则返回。意在 opId是唯一的,因此您可以根据附加了当前时间或其他内容的客户端的 session ID 生成它(在 Javascript 中, new Date().getTime() 将为您提供自纪元以来的毫秒数)。

使用这种方法,服务器必须维护状态(在我的示例中为 LookUpSet),因此您需要某种方式来做到这一点,例如数据库或仅将其存储在内存中。还需要对服务进行架构设计,以便调用 abort 不会使事情处于非工作状态,这当然在很大程度上取决于它的作用。

另一个真正重要的要求是数据可以拆分并分块处理。这就是允许服务可中断的原因。

最后,如果要中止某个操作,则 AbortOperation必须调用 - 简单地中止 XMLHttpRequest 调用不会有帮助,因为操作将继续直到完成。

编辑

来自这个问题: ASP.Net: How to stop page execution when browser disconnects?

您也可以查看 Response.IsClientConnected属性来尝试确定调用是否已中止。

一般来说,服务器不会知道客户端已经断开连接,直到它尝试向它发送数据。见 Best practice to detect a client disconnection in .NET?Instantly detect client disconnection from server socket .

关于asp.net - 在 asp.net 上处理 XMLHttpRequest 中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com