gpt4 book ai didi

asp.net - 返回响应给客户端后继续处理

转载 作者:行者123 更新时间:2023-12-02 14:15:46 24 4
gpt4 key购买 nike

我有一个通用处理程序 (.ashx) 页面,它从主要提供商接收 XML 文档。然后,我将该 XML 文档发送给第三方进行承保。我等待第 3 方的响应,然后将该响应传递给主要提供商。所有这一切都在 30 秒或更短的时间内发生。

我的问题是,主要提供商最多只会等待 30 秒,然后才会关闭连接并继续。我正在尝试启动内部计时器,如果我没有收到第 3 方承销商的回复,请无论如何向主要提供商发送回复。这一切都运行良好。

我想要做的是将响应发送回主要提供商,但继续等待第 3 方承销商的响应。他们会把它交给我们......但有时可能需要几分钟。

我尝试过各种组合

Response.Flush();
Response.Close();
Response.End();
context.ApplicationInstance.CompleteRequest();

我要做的就是a)抛出有关线程被中止的错误,或“无法计算表达式,因为代码已优化或 native 框架位于调用堆栈顶部。”,或b ) 客户端认为请求刚刚终止并且从未收到响应。

如果不重新设计大部分逻辑,我就无法实现队列类型架构,即使如此,我也不想这样做,因为这会增加响应的处理时间。

有什么建议吗?看来 .Close() 和 .End() 并不像我想象的那样发挥作用,而且我不知道应该使用什么来代替。

最佳答案

也许System.Threading.ThreadPool.QueueUserWorkitem()可以帮助你吗?

这个想法是将一个操作排队,只要线程池中有空闲线程,该操作就会运行。

public class Data {
public int ID {get; set; }
public string OtherData { get; set; }
}

public override void ProcessRequest(HttpContext context)
{
var workLoad = new Data {
ID = int.Parse(context.Request.Params["ID"]),
OtherData = context.Request.Params["OtherData"]
};
// somewhere before the end :
ThreadPool.QueueUserWorkItem(new WaitCallback(LongRunningMethod), workLoad);

Response.Flush();
Response.Close();
}

public void LongRunningMethod(object state)
{
var data = (Data)state;
CalculateTheOriginOfTheLife(data.ID, data.OtherData);
}

关于asp.net - 返回响应给客户端后继续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298191/

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