我有一个像在SignalR 1.1.2上运行的应用程序那样的正常聊天,它将被放置在负载平衡的服务器上,因此我需要实现一个底板解决方案来同步服务器。
这是一个ASP.NET MVC4 .NET 4.5应用程序。使用 SignalR集线器 ,而不是持久连接。该应用程序在客户端利用AngularJS来处理ui绑定和更新。
我已经按照此处列出的步骤来实现sql服务器背板,并使用了此处概述的从1.x到2.0迁移中概述的步骤。该解决方案可以构建,但是当点击使用SignalR的页面时,“ / signalr / hubs”脚本引用将返回500错误。
这是我到目前为止所采取的步骤清单。
使用nuget,删除了与SignalR 1.1.2相关的所有引用和依赖项。仔细检查/ bin和/ packages目录,以确保它们不再引用任何旧库。这是在与2.0升级有关的github 问题上找到的每条评论,该评论说卸载和重新安装SignalR是升级的方式。
通过Package Manager Console(PMC)安装了SignalR 2.0.0-beta2 Install-Package Microsoft.AspNet.SignalR -Pre
Install-Package Microsoft.AspNet.SignalR -Pre
使用PMC安装的SQL Server消息传递背板 Install-Package Microsoft.AspNet.SignalR.SqlServer -Pre
Install-Package Microsoft.AspNet.SignalR.SqlServer -Pre
RouteTable.Routes.MapHubs();已从Global.asax中删除
RouteTable.Routes.MapHubs();
在项目的根目录中创建了Startup类。
Startup.cs
using Microsoft.AspNet.SignalR; using Microsoft.Owin; using Owin; namespace My.NameSpace { public class Startup { public void Configuration(IAppBuilder app) { app.MapHubs(); } } }
添加<add key="owin:AppStartup" value="My.NameSpace.Startup, App_Code"/>到<appSettings>Web.config内部
<add key="owin:AppStartup" value="My.NameSpace.Startup, App_Code"/>
<appSettings>
在Startup.Configuration()方法中放置一个断点,并验证该命中点并在应用启动时无例外地执行app.MapHubs
我没有使用持久连接,因此未包含该行app.MapConnection<MyConnection>("/echo");,也没有出现任何模棱两可的定义问题。
app.MapConnection<MyConnection>("/echo");
聊天应用页面引用以下库
<script src='/signalr/hubs'></script>
/signalr/hubs
chrome dev工具会在“网络”标签上返回500 Internal Server Error该/signalr/hubs呼叫。
500 Internal Server Error
文件系统没有/signalr/hubs目录
下一步是查看是否可以使用非常基本的集线器创建新的解决方案,并查看Signal 2.0是否可以正常工作。如果可以,我将比较这两种解决方案,以了解两者之间的区别。
有谁知道我还可以检查或研究什么才能使它起作用?
与StackOverflow相关的问题,具有类似的问题:一,二
事实证明,此问题已通过将项目配置更改为使用本地IIS Web服务器而不是Visual Studio Developer Server(Cassini)得以解决。
通过/signalr/hubs在浏览器中进入url并查看服务器错误(是
System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.
谷歌浏览了该页面,该页面显示该错误是由ASP.NET Development Server不支持集成管道模式引起的。
您可以通过右键单击项目,选择属性,单击Web选项卡,然后在“服务器”部分下选择“使用本地IIS Web服务器”来更改使用的服务器。