问题如下: 外部服务器将转换为HTTP请求的传入SMS消息发送到我有时非常耗时的.aspx页面。如果在20秒内没有响应返回到外部服务器,这被视为超时,同样的消息再次发送到我的aspx页面(可能再次....)
对我来说,最佳解决方案是aspx页面读取传入消息(作为对aspx页面的HTTP请求),在另一个线程中开始处理消息,并立即将响应呈现给外部服务器。外部服务器对HTTP状态(通常为200)以外的其他内容不感兴趣。完成消息处理后,将导致进入应用程序的日志文件。
通过向aspx页面发出另一个Web请求来完成消息的处理,我尝试对Web请求使用BeginGetResponse方法,并创建了一个处理完成的Web请求到处理页面的处理程序。问题是处理程序似乎没有被调用,很可能是因为aspx页面的生命周期在异步Web请求完成之前结束。
有没有人能解决这个问题呢?我还查看了异步页面模型,但这似乎也不适合我,因为在完成消息处理之前应该将响应返回给外部服务器。
问候,Eivind
答案 0 :(得分:1)
我非常警惕以这种方式在ASP.Net中使用线程。使用它们来利用多个核心是一回事。使用它们来设置某种并发响应技术似乎是灾难的一种方法。特别是当有一个更优雅的解决方案时。
您的ASP.Net应用程序应该只接收消息并将其丢弃在数据库中并发送成功回复。它的工作已经完成。传递消息的工作应该由某种服务或守护进程处理。 Windows服务构建和维护是一种痛苦,所以可能只是每隔30秒左右运行一次的计划任务,检查数据库中的排队消息就可以满足您的需求了。
我见过很多人尝试在ASP.Net中使用线程,因为他们真的应该创建一个后台服务。结果永远不会像你希望的那样可靠。
答案 1 :(得分:0)
异步页面模型绝对不是解决方案。您是否尝试过使用unload事件来执行EndRequest?我真的不知道这是否有效,但值得一试。最强大的方法是使用Windows服务来运行异步请求。