我有以下用法场景:用户登录ASP.NET应用程序;并在某些时候连接到远程TCP / IP服务器。服务器的响应可能会在显着延迟(例如几个小时)之后发生。想象一下,用户提交批处理作业,作业可能会运行很长时间。因此,用户可以关闭浏览器,喝杯咖啡,然后回来查看结果。
但是,如果客户端关闭连接,服务器将从不返回结果。因此,在应用程序对象中保留Socket信息不会起作用 - 一旦用户关闭浏览器,它就会消失。
在IIS启动时,还有其他方法可以保留此打开的套接字吗?此外,如果第二个用户登录,我宁愿使用相同的连接。最后,我意识到解决方案很脆弱,有时可能会破坏。没关系。
远程服务器是20年前的主机应用程序;所以没有机会改变那里。只要用户没有注销 - 现在一切正常。一切都在局域网上,因此没有路由问题使情况复杂化。
答案 0 :(得分:0)
您有几种持久会话状态的选项:MSDN - Session-State Modes
这是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 Overview,ASP.NET Session State Overview,但不建议在处于应用程序状态的繁忙服务器上存储大量数据。哦,是的,MSDN - Caching Application Data
答案 1 :(得分:0)
用户注销时,应用程序字典的内容不会丢失。你的计划会起作用(以一种脆弱的方式,但你说没关系)。
请注意,工作进程可以出于多种原因退出,因此期望在任意时间点被杀死。