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