我希望你们能帮忙解决这个问题:)
我的页面在浏览器中呈现后,我需要做一些事情。详细地说,我需要发送电子邮件/短信和其他非浏览器相关的东西,但操作需要时间,我不希望我的访问者等待5-8秒的成功消息。
我尝试在页面卸载事件中添加“After Rendering Code”。这似乎有效 - 但仅限于localhost。它不适用于我们的生产服务器。
所以我想,也许这是一些 IIS设置?我还读到它取决于浏览器,如果它会在渲染完成后显示epage - 或者等待整个包结束。
所以我试图在我的“A-R-C”之前用 Response.end 结束包裹,但那只是杀了它。
你们对这方面有什么解释或理论吗?
答案 0 :(得分:0)
您可能会看到将电子邮件/短信与页面完全异步解耦,例如:通过使用MSMQ队列。通过这种方式,您还可以以更强大的方式处理电子邮件/ SMS,例如如果SMTP服务器关闭或SMS网关忙,则在10分钟内重试。
编辑:Re:MSMQ vs Thread / Threadpool - 在大多数情况下,使用新的工作线程也应该可以正常工作,但是,对于高端可伸缩性,您可能会考虑使用MSMQ或类似的。
看一下这篇SO帖子here
线程池(或线程) - 更快,更容易实施 - 如果应用程序池被回收,则未发送的SMS /消息将丢失 - 将竞争线程(建议使用自定义Threadpool)
MSMQ - 需要做更多工作 - 需要创建一个新的监听程序进程(例如使用WCF)来处理消息 - 除非您可以控制服务器,否则可能难以托管 - 可以是事务性和持久性的 - 即使您的应用程序池被回收或服务器重新启动,未发送的消息也不会丢失。 - 可以对吞吐量进行更多控制 - 限制和延迟交付 - 例如在价格低廉的时候发送短信
答案 1 :(得分:0)
您可以创建一个新线程并在该线程上调用您的方法。
答案 2 :(得分:0)
ThreadPool个主题可以帮助您实现此功能。