了解SignalR的加载过程

本文关键字:过程 加载 SignalR 了解 | 更新日期: 2023-09-27 18:04:02

我正在尝试学习和设置一个SignalR解决方案,这将是一定规模(~1500并发用户),我想确保我完全理解它是如何在幕后工作的。

特别是,如果有人能向我解释一下下面的设置是如何启动SignalR的,我会很感激的

(来自)

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-getting-started-with-signalr-20

using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

我可以看到代码使用了assembly注释,对于Owin,它也指定了要启动的类。

但我正在努力的是这实际上是如何工作的。

什么时候OWIN dll实际加载,什么时候Startup类实际被加载?

为什么SignalR需要OWIN ?它只是一个方便使用的库吗?

了解SignalR的加载过程

有一个很好的参考如何在asp.net上工作。

每个OWIN应用程序都有一个启动类,您可以在其中指定应用程序管道的组件。根据您选择的托管模型(OwinHost, IIS和IIS- express),有不同的方法可以将启动类与运行时连接起来。

基本上,SignalR是一个OWIN(面向。net的开放Web接口)中间件。

from getting started with OWIN and Katana:

. net的开放Web接口(OWIN)定义了。net Web服务器和Web应用程序之间的抽象。通过将web服务器与应用程序解耦,OWIN使得为。net web开发创建中间件变得更加容易。此外,OWIN可以更容易地将web应用程序移植到其他主机上,例如,在Windows服务或其他进程中自托管。

在应用程序启动期间,Katana搜索启动类来引导每个中间件组件进入应用程序。您可以考虑以与传统启动对象相同的方式处理创建的任何启动类,这些启动类可能从global.asax, app.run, void main或其他初始化,而无需绑定到这些方法的上下文中。

编辑

javascript文件/signalR/hubs的问题是相当复杂的,但有相当数量的文档。本质上,引用是一个动态地生成的代理。

当您编写代码来调用服务器方法时,生成的代理使您能够使用看起来好像正在执行本地函数的语法:您可以编写serverMethod(arg1, arg2)而不是invoke('serverMethod', arg1, arg2)。如果您输入错误的服务器方法名,生成的代理语法还会使客户端立即出现可理解的错误。如果您手动创建定义代理的文件,您还可以获得IntelliSense支持,以编写调用服务器方法的代码。

问题是Sitecore和其他CMS实用程序实际上会尝试在它们的路由中处理URL模式,而不是允许代理采取行动。您需要确保CMS为SignalR位指定了一个忽略。

在网上。

<setting name="IgnoreUrlPrefixes"
    value="/sitecore/default.aspx|/trace.axd|
     .....
    |/signalr|/signalr/hubs" />