SignalR 2.0.2创建PersistentConnection

我使用包管理器控制台将SignalR 2.0.2安装到我的MVC 4.5应用程序中。 我做了连接配置的标准示例。

namespace SignalRPersistent { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR("/echo"); } } } 

问题是MapSignalR方法不接受字符串,而编译错误则说明了这一点

参数类型字符串不能分配给参数类型SignalRHubConfiguration。 但我可以看到一个接受字符串的重载方法,但它坚持不编译。 有什么问题?

我改变了下面的代码,然后我就开始工作了。

 app.MapSignalR("/echo"); 

ConnectionHub是从PersistentConnectioninheritance的类。 互联网上的例子不需要指定课程,但它们对我没有用。

好吧,Ryu提供的解决方案是正确的 – 但可能会让许多人感到困惑。 说实话,我没有找到一个演练(使用完全相同的代码作为示例) – 但没有任何工作,部分原因是随着信号器项目的进展,许多东西变得过时了。

所以,你有一个扩展PersistentConnection的类,在这个类中你有所有的任务(OnConnected,OnReceived等):

 using System.Threading.Tasks; using Microsoft.AspNet.SignalR; public class MyAwesomeConnection : PersistentConnection { protected override Task OnConnected(IRequest request, string connectionId) { var fromClient = request.QueryString["testQuery"]; return base.OnConnected(request, connectionId); } protected override Task OnReceived(IRequest request, string connectionId, string data) { return base.OnReceived(request, connectionId, data); } } 

然后在OwinStartup类中“映射”该类(在本例中为MyAwesomeConnection ):

 using DataCommunication; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(SignalRServer.Startup))] namespace SignalRServer { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR("/server"); } } } 

现在您可以使用javascript连接,并在引用jquery和jquery.signalR脚本时非常小心。 首先是jquery,然后是jquery.signalR,然后是所有其他使用signalR东西的脚本,并避免使用@ Scripts.Render(“bundles / jquery”)。 只是以旧时尚的方式做到:

      @ViewBag.Title   @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr")    @RenderBody() @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false)   

在MyAwesomeConnection类的OnConnected内部设置一个断点,并读出fromClient变量,该变量将在客户端(javascript)连接时触发。 它应该有希望读出“这个废话终于有效”。

现在你应该很好地使用signalR构建一些引人注目的东西,如果某些东西仍然不起作用 – 那么你要么缺少nuget中的一些程序集,要么在项目中没有正确设置引用。