了解SignalR的加载过程

时间:2014-05-19 00:11:53

标签: c# asp.net signalr owin

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

特别是,如果有人能向我解释以下设置如何实际启动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();
        }
    }
}

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

但我正在努力解决这个问题的实际效果。

OWIN dll何时实际加载,Startup类何时实际加载?

为什么信号转换器需要OWIN?它只是一个便利用途库吗?

1 个答案:

答案 0 :(得分:3)

asp.net上有一个很好的参考。

  

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

基本上,SignalR是一个OWIN(.NET的开放Web界面)中间件。

来自getting started with OWIN and Katana

  

Open Web Interface for .NET(OWIN)定义了.NET Web服务器和Web应用程序之间的抽象。通过将Web服务器与应用程序分离,OWIN可以更轻松地为.NET Web开发创建中间件。此外,OWIN可以更轻松地将Web应用程序移植到其他主机 - 例如,在Windows服务或其他进程中自托管。

在App启动期间,Katana会搜索启动类,以便将每个中间件组件引导到应用程序中。您可以将您创建的任何启动类视为可以从global.asaxapp.runvoid main或其他方式初始化传统引导对象的方式进行处理,而不受上下文的约束这些方法论。

修改

javascript文件/signalR/hubs的问题非常复杂,但有相当多的documentation。基本上,参考是动态生成的代理。

  

当您编写代码来调用服务器方法时,生成的代理使您可以使用看起来就像执行本地函数的语法:您可以编写serverMethod(arg1,arg2)而不是调用(' serverMethod&# 39;,arg1,arg2)。如果您错误地键入服务器方法名称,则生成的代理语法还会启用即时且可理解的客户端错误。如果您手动创建定义代理的文件,您还可以获得IntelliSense支持,以编写调用服务器方法的代码。

问题是Sitecore和其他CMS实用程序实际上会尝试处理其路由中的URL模式,而不是允许代理采取操作。您需要确保CMS具有为SignalR位指定的忽略。

在web.config中,更新IgnoreUrlPrefixes:

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