我正在尝试学习和设置一个具有一定规模(约1500个并发用户)的SignalR解决方案,我想确保我完全理解它在幕后的工作原理。
特别是,如果有人能向我解释以下设置如何实际启动SignalR
,我将不胜感激(取自)
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?它只是一个便利用途库吗?
答案 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.asax
,app.run
,void 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" />