Signal-R如何适应IIS激活模型?

 lee某某 发布于 2023-02-08 16:50

我正在学习Signal-R,这是我一直在想的事情.

Signal-R如何适应IIS/ASP.NET生命周期?

集线器存在多长时间(我看到它们有重新连接语义)?

IIS是否会阻止关闭具有持久连接的AppDomain?

据我所知,IIS旨在处理请求 - 响应方案.一个请求命中IIS,它找到AppDomain,激活它,然后将请求传递给它.在空闲时间之后,关闭AppDomain.如果请求过长,则抛出超时异常.

现在让我们假设我有另一个通过TCP套接字广播信息的应用程序.我希望我的javascript客户端能够实时获取该信息,因此我创建了一个Signal-R Web应用程序.我可以在应用程序启动时创建一个TCP客户端,但是什么能保证IIS在一段时间不活动后不会关闭整个事件?

我可以自己在一个窗口服务中托管Signal-R应用程序,但后来我将不得不使用不同的端口,启用跨域等...部署的许多问题.但是,我担心使用ASP.NET MVC应用程序,因为它看起来像是在摩托车中安装驱动轮.

干杯.

1 个回答
  • IIS/ASP.NET生命周期中的SignalR

    SignalR使用Owin:http://owin.org/

    关于Owin的一篇好文章:http://msdn.microsoft.com/en-us/magazine/dn451439.aspx

    Hub对象的生命周期

    来自SignalR文档:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server#transience:

    您没有实例化Hub类或从服务器上自己的代码调用其方法; 所有这些都由SignalR Hubs管道完成.每次需要处理Hub操作时,SignalR都会创建Hub类的新实例,例如客户端连接,断开连接或对服务器进行方法调用时.

    因为Hub类的实例是瞬态的,所以不能使用它们来维护从一个方法调用到下一个方法的状态.每次服务器从客户端接收方法调用时,Hub类的新实例都会处理该消息.要通过多个连接和方法调用来维护状态,请使用其他方法,例如数据库,Hub类上的静态变量,或不从Hub派生的其他类.如果将数据保留在内存中,使用Hub类上的静态变量等方法,则应用程序域回收时数据将丢失.

    您长时间运行的TCP客户端

    这不是SignalR的问题.您的TCP客户端可以被IIS关闭:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/

    我宁愿让TCP客户端在Windows服务中运行.TCP客户端接收TCP广播消息,并使用SignalR .NET客户端将消息转发到集线器.

    2023-02-08 16:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有