【发布时间】:2014-05-29 16:07:52
【问题描述】:
我有以下使用场景: 用户登录到 ASP.NET 应用程序;并在某个时候与远程 TCP/IP 服务器建立连接。服务器的响应可能会在显着延迟(例如,几个小时)之后出现。假设用户提交了一个批处理作业,该作业可能运行了很长时间。因此,用户可以关闭浏览器,喝杯咖啡,稍后再回来查看结果。
但是,如果客户端关闭连接,服务器将永远返回结果。因此,将 Socket 信息保留在 Application 对象中是行不通的——一旦用户关闭浏览器,它就会消失。
在 IIS 启动时,还有其他方法可以保留这个打开的套接字吗?此外,如果第二个用户登录,我更愿意使用相同的连接。最后,我意识到解决方案很脆弱,有时可能会破裂。没关系。
远程服务器是有 20 年历史的大型机应用程序;所以那里没有改变的机会。只要用户不注销 - 现在一切正常。一切都在 LAN 上,因此不会出现使情况复杂化的路由问题。
【问题讨论】:
-
您可以使用带有 GUID 的 cookie 为之前的会话重新建立连接。我不建议将会话保持那么长时间,如果它们由于任何其他原因被破坏。或者 sql sessionstate tracking 什么的。饼干更简单。 msdn.microsoft.com/en-ca/library/ms526029%28v=vs.90%29.aspx
-
cookie 的问题(如果我正确理解您的建议)它不能解决根本问题。一旦用户关闭浏览器,Application 对象就会被销毁并关闭连接。没有“重新建立”连接。所以,我不确定 cookie 会有什么帮助......
-
为什么当用户注销时应用程序状态会消失?这听起来不对。你那里有一个错误。修复它,这将起作用(以一种脆弱的方式,但你说没关系)。
-
这是真的,我只是重新阅读了 OP 并注意到了。大声笑...仍然需要某种身份验证来维护池回收、会话超时等的状态...(除非没有必要)。不过,可以在一个下午实现基于 cookie 的身份验证。
-
@usr - 我误解了 Microsoft 文档。你介意把它作为答案,所以我可以接受吗?谢谢
标签: asp.net sockets iis tcpclient