如何在ASP.NET MVC 4中使用SignalR V2 beta。

4

v2之前:

RouteTable.Routes.MapHubs();

在v2版本中,MapHubs已经不存在了。维基上建议添加一个Startup类和一个Configuration方法,并在其中调用app.MapHubs()方法。
namespace MyAssembly 
{
public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        //Before v2
        //RouteTable.Routes.MapHubs();

        app.MapHubs();
    }
}
}

但是这个方法从未被调用,没有错误发生,也没有设置任何中心节点。

我想应该在global.asax.cs文件中添加一些代码。

秘诀是什么?


你有在 web.config 中添加任何内容吗? - davidfowl
不,在web.config中没有任何东西。 - Softlion
1
现在他们把它改成了 app.MapSignalR(); - Denis Besic
4个回答

1
尝试定义 [assembly: OwinStartup(typeof(MyAssembly.Startup))],以查看是否正在使用您的启动类。

1
OwinStartup在beta2中不存在。 - davidfowl
1
尝试添加appSetting owin:AppStartup,其值为您的启动类的完全限定名称。例如"MyAssembly.Startup,MyAssembly"。 - Praburaj
已经尝试过了,完全没有任何反应。似乎SignalR v2仅针对VS2013/MVC5! - Softlion
相关问题:https://dev59.com/hHTYa4cB1Zd3GeqPuGI2?rq=1 - Softlion

1
解决方案!
<appSettings>
    <add key="owin:AppStartup" value="MyNameSpace.Startup, MyNameSpace" />
</appSettings>

请更新MVC4(不是预发布版,而是最新的稳定版本)和SignalR/owin nugets。

请修复js客户端中的错误:

  • 如果disconnectTimeout=999000,则它被禁用。必须在服务器端设置:GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(999); 注意:服务器端不能设置小于6的值(如果DisconnectTimeout<6,则signalr会抛出异常)。因此,请使用这个特殊数字。
  • webSockets:在sockettransport中将connection.socket=null,否则在手动调用stop后,调用start将失败
  • serverSentEvents:防止在窗口卸载时尝试重新连接时引起的错误
  • 如果signalr hub url暂时不可用,则chrome会失败并抛出异常:不要放弃,而是尝试下一个可用的协议/尝试重新连接。

你完全不需要添加任何配置。你所做的只是重新声明了所有默认值。 - davidfowl
也许吧,但如果没有它,什么都做不了。 - Softlion
1
什么是正确的命名空间?我讨厌魔法。我做数学,不是占卜。 - Softlion
在beta2版本之后,它会抛出一个很好的错误提示,告诉你该怎么做。我们没有在beta2中进行更改。 "正确"的命名空间是以您的程序集命名的那个。 - davidfowl
我又尝试了一下,这次运行得很好。唯一的区别是我将MVC4更新到最新的稳定版本。 - Softlion
显示剩余2条评论

0
在 web.config 文件中必须使用完全限定名来指定类,例如:
<appSettings>
    <add key="owin:AppStartup" value="**My.Name.Space.Startup**, **AssemblyName**" />
</appSettings>

当我使用命名空间代替程序集名称时,出现了问题,但是通过完全限定名称,不需要对web.config进行任何其他更改就可以正常工作!

更新:我还按照链接http://www.asp.net/vnext/overview/latest/release-notes#TOC13的步骤操作,即删除了NuGet包“Microsoft.AspNet.SignalR.Owin”。


我会重试100次,但我不是初学者。那个方法没有起作用。好吧,它确实起作用了,但是出现了500错误,而且没有任何迹象/日志,这很奇怪。 - Softlion
@Softlion,为什么不在您现有的程序集中尝试使用文档中最简单的聊天示例呢? 如果可以工作,您就可以排除程序集名称问题,集中精力解决其他问题。http://www.asp.net/signalr/overview/troubleshooting-and-debugging/troubleshooting - V.B.
@Softlion,您是否也删除了NuGet包“Microsoft.AspNet.SignalR.Owin”?http://www.asp.net/vnext/overview/latest/release-notes#TOC13 - V.B.
我又尝试了一下,这次运行得很好。唯一的区别是我将MVC4更新到了最新的稳定版本。 - Softlion

0

我成功地使2.0 beta版本运行起来了,方法如下:

  • 删除所有对旧版SignalR的引用,即通过nuget卸载库并仔细检查/bin目录

  • 通过Package Manager Console安装SignalR 2.0.0-beta2 Install-Package Microsoft.AspNet.SignalR -Pre

  • 按照1.x到2.0迁移中这里所述的步骤进行操作

  • 最重要的是将项目配置更改为使用本地IIS Web服务器而不是Visual Studio Developer Server(Cassini)。

有关更多信息,请参见我发布的问题/答案这里


Cassini早已被IIS Express取代。Web服务器不应该是问题,因为SignalR可以在任何版本上正常工作,即使仅在IIS 8上启用了WebSockets。 - Softlion
@Softlion 我正在使用VS2012,切换到本地的IIS解决了我遇到的错误,该错误信息为 System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. - Jerry
当然可以,但我没有这个错误。我会在几天内重新检查。 - Softlion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接