asp.net - 如何在iis应用程序范围内部署套接字服务器

标签 asp.net sockets iis iis-8

我正在实现一个ASP.NET应用程序,该应用程序需要处理常规的http请求,但是响应需要我需要从提供程序中获取的数据,这些提供程序是通过套接字提供其数据的可执行文件。我的实现计划是:

1)在Application_Start中,启动一个新的线程,该线程启动一个套接字服务器
2)在Session_Start中,启动特定于 session 的进程,该进程最终将连接到套接字服务器,然后从那里执行Monitor.Wait,等待对特定于 session 的锁对象的存储,该对象已通过Session键存储在Application.Contents
3)当套接字服务器看到新连接时,使数据可用于适当的 session 目录,并在特定于 session 的锁定对象上执行Monitor.Pulse

在IIS中这在技术上可行吗?这个概念可以用作稳定的系统吗?

在回答之前,请记住我不是在问“这是推荐的方法”,我知道不是,如果我可以选择从头开始编写此系统,我会做不同的事情。我也无法更改程序使用套接字进行通信的事实。

最佳答案

考虑到约束条件,这种方法很有意义。

当要将状态保持在Web应用程序中时,IIS工作进程的关闭和回收始终是麻烦的问题。请注意,由于多种原因,您的工作进程几乎可以随时回收。其中某些原因是不可避免的:服务器重新启动,应用程序部署,导致进程崩溃的错误。因此,您需要仔细考虑在这些情况下会发生什么:在子进程仍然运行时,所有 session 都将丢失。建议的解决方案:将子级添加到Windows Job Object中,并将作业配置为在父级退出时被杀死。

使用重叠的IIS工作程序回收,您可以同时运行两个正常工作的工作程序。您必须应对这种可能性。

考虑子进程立即崩溃的可能性。它永远不会建立连接。确保您的应用不会永远等待连接挂起。

关于asp.net - 如何在iis应用程序范围内部署套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25266656/

相关文章:

javascript - 如何从asp.net c#中选定的日期获取上个月的日期

c++ - 通过 system() 调用启动另一个程序会阻塞套接字

asp.net - 日期选择器 JavaScript

java - JAVA套接字服务器应用程序框架

c++ - 使用本地 ipv6 套接字将 UDP 发送到本地 ipv4 地址

amazon-web-services - 使用外部登录强制 HTTPS 重定向时出现 HTTP 500 错误

asp.net - 如何在 ASP.NET 中获取网络打印机

c# - AMP 页面未在我的开发站点中重定向 [非 Wordpress]

c# - HttpPostedFileBase.SaveAs 工作但没有文件上传也没有异常

c# - 从 visual studio 中完全删除 "error list"