3

我将在这个问题的开头说我大约在 30 小时前开始使用 SignalR,所以请原谅任何业余问题,如果您知道一些我错过的文档,请随时指出我。另外,我不是想写一篇博文——只是解释我为达到我所经历的步骤。

TLDR?跳到最后的问题...

我需要使用 Sql Server 背板(很想使用 Redis,但我们目前不处理 Redis,并且不愿意在一个开发周期中引入太多新技术)。目前,没有可用的 NuGet 包,Microsoft.AspNet.SignalR.SqlServer所以我必须使用 Github 源代码。

所以我去下载源代码,编译并添加对 Microsoft.AspNet.SignalR.SqlServer.dll 的引用,但现在编译失败(特别GlobalHost.DependencyResolver.UseSqlServer( ... )是在我的代码中引用时 - 这是一个依赖冲突,*.SqlServer代码需要更新版本*.SignalR.Core- 这并不奇怪,因为自从 NuGet 包发布以来,Github 的版本(毫无疑问)有很多变化)。:(

所以下一步是使用*.Core我编译的*.SqlServer. 下一个问题 - 新的 SignalR 版本不再适用于*.Hosting.Common*.Hosting.AspNet已被*.Owin库替换。

所以,我添加了*.Owin(和 Owin - 来自 NuGet),但现在我遇到了另一个问题:MapHubs( ... )扩展方法不再起作用 -MapHubs( IAppBuilder builder, ... )在 Owin 中调用了扩展方法,但它们不再起作用RouteTable- 它们起作用Owin.IAppBuilder(因此我想需要参考 Owin)。

所以这就是我所在的地方。我对Owin做了一个快速的阅读(似乎是一个很酷的概念),但我并不特别在意花几个小时来解决这个问题,只是为了能够在服务器端设置 SignalR。所以,现在的问题:

  1. 我是否应该尝试*.SqlServer与 SignalR 的较旧 NuGet 包配合使用(换句话说,更改依赖关系是否可能*.SqlServer会引入不可靠的行为)?或者,是否有一个版本*.SqlServer可以与 SignalR 的当前 NuGet 版本一起使用?
  2. 通过 Owin 主机方法运行 SignalR 需要哪些具体步骤(如果没有引入 Nancy 集成,我找不到任何示例 - 或者这是正确的方法)?
  3. MapHubs 方法的替代方法是什么?我从哪里获得 IAppBuilder?我什至应该这样做吗?
  4. Google Groups 帖子中,David Fowler 指出,在 Owin 支持下,不再需要 AspNet 依赖项。很好 - 但是现在有什么理由在 ASP.Net MVC 应用程序中使用 SignalR 吗?
  5. 如果 SignalR 的任何部分都没有通过服务器上的 IIS 托管,客户端回退(即 SSE 或长轮询)是通过 IIS 还是独立使用 Owin 主机?
  6. 最后,我计划在一个 ASP.Net MVC 4 项目中运行 SignalR,该项目作为另一个现有站点的虚拟目录托管 - 我想在单个域中工作。当我的站点托管在 IIS 7.5 中时,使用 Owin 方法是否仍然可行?

更新:根据上面的1.,我设法通过*.SqlServer依赖当前的 NuGet*.Core实现来编译代码。所以现在我可以继续开发了。我不认为我想在生产中使用它——我只需要做一个与处理对象相关的小改动——但我只是不认为这是一个好方法。所以我关于 Owin 方法的问题仍然存在——除非有人能说服我我所采取的方法是好的。

谢谢,扎克

4

1 回答 1

1

简短的回答:

希望这会帮助其他有这个问题的人(我敢肯定你们至少有一个人!):似乎我提出的问题的时机真的很糟糕,因为在发布几个小时后,SignalR 在 NuGet 中更新为版本 1.0.0-rc1。所以,对于任何与我有同样问题的人 - 只需升级软件包。

细节:

安装后,当您查看引用时,您会注意到现在有一​​个Microsoft.AspNet.SignalR.SystemWeb引用。在没有深入研究的情况下,我认为这是一个替代品*.Hosting.Common*.Hosting.AspNet因为在更新MapHubs( ... )扩展方法后工作正常。

我还注意到*.SystemWeb引用依赖于*.Owin- 所以我猜 Owin 引用被用作抽象层,它允许 SystemWeb 托管独立于底层 IIS/其他服务器实现。

至于.SqlServer参考,那仍然需要我针对 NuGet 版本编译一个版本*.Core,以便在本地编译。我现在只使用它,并希望项目团队在不久的将来某个时候在 NuGet 上发布一个工作版本。

一个现实的替代方案是让我的团队相信我们应该将 Redis 加入其中——在与 Redis 合作过其他项目后,出于性能考虑,我认为这是一个不错的选择,但它确实需要 Linux,这可能是一个问题.Net 团队...

于 2012-12-14T10:55:37.853 回答