如何在IIS中保持TCP / IP套接字打开?

时间:2014-05-25 06:24:41

标签: asp.net sockets iis tcpclient

我有以下用法场景:用户登录ASP.NET应用程序;并在某些时候连接到远程TCP / IP服务器。服务器的响应可能会在显着延迟(例如几个小时)之后发生。想象一下,用户提交批处理作业,作业可能会运行很长时间。因此,用户可以关闭浏览器,喝杯咖啡,然后回来查看结果。

但是,如果客户端关闭连接,服务器将从不返回结果。因此,在应用程序对象中保留Socket信息不会起作用 - 一旦用户关闭浏览器,它就会消失。

在IIS启动时,还有其他方法可以保留此打开的套接字吗?此外,如果第二个用户登录,我宁愿使用相同的连接。最后,我意识到解决方案很脆弱,有时可能会破坏。没关系。

远程服务器是20年前的主机应用程序;所以没有机会改变那里。只要用户没有注销 - 现在一切正常。一切都在局域网上,因此没有路由问题使情况复杂化。

2 个答案:

答案 0 :(得分:0)

您有几种持久会话状态的选项:MSDN - Session-State Modes

  • inproc模式:断开连接,状态丢失。如果你使用cookies,和 在后端的某处存储信息/数据,然后您可以映射GUID 对于数据,无论会话如何。或使用application-state。
  • stateserver :在断开连接和应用程序重新启动时保持不变, 但不能跨越iis / pool / server重启,除非你使用另一个 服务器或cookie / auth。有时可能会有问题。
  • sqlserver :顾名思义,使用特殊格式的数据库/表结构来保存各种场景下的状态数据。
  • 自定义/关闭:允许您构建自己的提供商,或完全关闭它。

这是cookie方法,到目前为止最简单(你必须生成一个GUID,然后将它存储在cookie和应用程序状态或后端数据库中):MSDN - Maintaining Session State with Cookies

  

您可以在用户的​​客户端上保留Cookie。然后,在服务器上   重启/客户端断开连接/任何其他方案只需从中拉出GUID   应用程序/会话状态或来自后端数据库,后端数据库也将存储数据   报告/输出。

另外,作为一种警告:尽管可以使用cookie通过GUID将用户授权给帐户/数据库记录,但除了无法识别的信息之外,其他所有目的都被认为是不安全的,例如:查看购物车,简单报告,地位等......

哦,IIS会话超时的内容(默认为20分钟):MSDN - Configure Session Time-out (IIS 7)MSDN - Configure Idle Time-out Settings for an Application Pool (IIS 7)

完全忘记添加以下链接:ASP.NET Application State OverviewASP.NET Session State Overview,但不建议在处于应用程序状态的繁忙服务器上存储大量数据。哦,是的,MSDN - Caching Application Data

答案 1 :(得分:0)

用户注销时,应用程序字典的内容不会丢失。你的计划会起作用(以一种脆弱的方式,但你说没关系)。

请注意,工作进程可以出于多种原因退出,因此期望在任意时间点被杀死。