我正在实现一个需要为传统http请求提供服务的ASP.NET应用程序,但响应需要从需要通过套接字提供数据的可执行文件的提供程序获取的数据。我的实施计划是:
1)在Application_Start中,启动一个启动套接字服务器的新线程
2)在Session_Start中,启动特定于会话的进程,该进程最终将连接到套接字服务器,并从那里对特定于会话的锁定对象执行Monitor.Wait,我已通过Session键存储在Application.Contents中登记/>
3)当套接字服务器看到新连接时,使数据可用于相应的会话内容,并在特定于会话的锁定对象上执行Monitor.Pulse
这在IIS中技术上是否可行?这个概念可以作为一个稳定的系统吗?
在回答之前,请记住我并非要求"这是推荐的方法",我知道它不是,如果我可以选择从头开始编写这个系统,我会这样做。我也无法改变程序使用套接字进行通信的事实。
答案 0 :(得分:1)
鉴于这种方法的限制,这种方法是有道理的。
在将Web状态保持在Web应用程序中时,关闭和回收IIS工作进程始终是一个棘手的问题。请注意,由于多种原因,您的工作进程可以随时回收。其中一些原因是不可避免的:服务器重启,应用程序部署,导致进程崩溃的错误。因此,您需要仔细考虑在这些情况下会发生什么:在子进程仍然运行时,所有会话都将丢失。建议的解决方案:将子项添加到Windows Job Object并配置父项退出时要终止的作业。
通过重叠IIS工作器回收,您可以同时运行两个正常运行的工作程序。你必须处理这种可能性。
考虑子进程立即崩溃的可能性。它永远不会建立联系。确保您的应用不会永远等待连接。