【问题标题】:How to use signalr v2 beta in asp.net mvc 4如何在asp.net mvc 4中使用signalr v2 beta
【发布时间】:2013-08-06 18:00:21
【问题描述】:

v2 之前:

RouteTable.Routes.MapHubs();

在 v2 中,MapHubs 不再存在。 wiki 说要添加一个 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 中添加了任何内容?
  • 不,web.config 中没有任何内容
  • 现在他们把它改成了 app.MapSignalR();

标签: asp.net-mvc-4 signalr owin


【解决方案1】:

尝试定义 [assembly : OwinStartup(typeof(MyAssembly.Startup))] 以查看您的 Startup 类是否被选中。

【讨论】:

  • OwinStartup 在 beta2 中不存在。
  • 尝试添加 appSetting owin:AppStartup 和 value= 您的启动类的完全限定名称。例如“MyAssembly.Startup, MyAssembly”
  • 已经试过了,什么也没做。似乎 Signalr v2 仅针对 VS2013/MVC5!
【解决方案2】:

编辑:删除不相关的行。

解决方案!

<appSettings>
    <add key="owin:AppStartup" value="MyNameSpace.Startup, MyNameSpace" />
</appSettings>

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

加上修复js客户端的bug:

  • 如果 disconnectTimeout=999000 则它被禁用。必须在服务器端设置: GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(999); 注意:服务器端不能设置值
  • webSockets:在 sockettransport 中设置 connection.socket = null,否则在(手动)调用 stop 后调用 start 失败
  • serverSentEvents:防止在卸载窗口时尝试重新连接导致的错误
  • 如果 signalr hub url 不可用(暂时),chrome 会失败并出现异常:与其放弃尝试下一个可用协议/尝试重新连接。

【讨论】:

  • 这行得通,即调用了启动代码,但是sql背板抛出异常,并且无法达到mvc动作。也许应该使用 MVC5 预发布包。
  • 您完全不需要您添加的任何配置。您所做的只是重新声明所有默认值。
  • 也许可以,但没有它就什么都做不了。
  • 很可能是因为你没有把类放在正确的命名空间中。
  • 什么是正确的命名空间?我讨厌魔法。我做数学不是占卜。
【解决方案3】:

我能够通过

获得 2.0 测试版
  • 删除对旧版本 SignalR 的所有引用,即 nuget 卸载库并仔细检查 /bin

  • 通过包管理器控制台Install-Package Microsoft.AspNet.SignalR -Pre安装了 SignalR 2.0.0-beta2@

  • 按照here 中概述的 1.x 到 2.0 迁移中的步骤进行操作

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

我发布的问题/答案中的更多信息here

【讨论】:

  • Cassini 早就被 IIS Express 取代了。 Web 服务器不应该是这里的问题,因为 SignalR 可以在任何版本上正常工作,即使 websocket 仅在 IIS 8 上激活。
  • @Softlion 我正在使用 VS2012 并从开发服务器切换到本地 IIS 修复了我遇到的错误 System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.
  • 当然,但我没有这个错误。我过几天再检查。
【解决方案4】:

在 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 次,但我不是初学者。那没有用。好吧,这确实只是为了得到 http 500 错误而没有任何奇怪的跟踪/日志。
  • @Softlion 为什么不尝试现有程序集中文档中最简单的聊天示例?如果这可行,您可以排除程序集名称问题并专注于其他事情asp.net/signalr/overview/troubleshooting-and-debugging/…
  • @Softlion 您是否也删除了 NuGet 包“Microsoft.AspNet.SignalR.Owin”? asp.net/vnext/overview/latest/release-notes#TOC13
  • 好吧,我又试了一次,它工作正常。唯一的区别是我将 MVC4 更新到了最新的稳定版本。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
相关资源
最近更新 更多