自托管SignalR方法未调用

时间:2014-08-12 14:41:35

标签: asp.net asp.net-mvc windows-services signalr

我是SignalR的新手,在自托管方案中使用SignalR集线器有点困难。 目前(仅供测试)我可以使用最简单的集线器:

public class NotificationsHub : Hub
    {
        public void Hello(string name)
        {
            Clients.All.hello("Hello " + name);
        }        
    }

此集线器类位于Windows服务应用程序中引用的类库项目中。我已将所有nuget包添加到Windows服务应用程序并添加了OWIN Startup类,如下所示:

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {            
            AppDomain.CurrentDomain.Load(typeof(NotificationsHub).Assembly.FullName); // as selfhosting doesn't scan referenced libraries for Hubs
            app.Map("/signalr", map => {
                map.UseCors(CorsOptions.AllowAll);
                var hubConfig = new HubConfiguration { 
                    EnableDetailedErrors = true,
                    EnableJSONP = true
                };
                map.RunSignalR(hubConfig);
            });
        }
    }

在Windows Service OnStart方法中,我使用以下方法托管signalR:

SignalR = WebApp.Start<Startup>("http://*:9191/");

在应与SignalR交互的ASP.NET MVC应用程序中,我有以下代码:

<script src="Scripts/jquery.signalR-2.1.1.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="http://localhost:9191/signalr/hubs"></script>
<script type="text/javascript">
        $(function () {
            $.connection.hub.url = "http://localhost:9191/signalr";
            var notif = $.connection.notificationsHub;

            notif.client.hello = function (msg)
            {
                alert(msg);
            }

            $.connection.hub.start().done(function () {
                $("#sayHello").click(function () {
                    notif.server.hello($("#myName").val());
                });
            });
        });
    </script>

问题是这在我的正确设置中无效...在浏览器控制台中我没有错误,〜/ signalr / hubs js看起来很好...... 如果我执行或多或少相同的配置,但在ASP.NET MVC应用程序中托管SignalR,一切都按预期工作。

更新:按照@ halter73的建议启用集线器的客户端日志记录,我收到以下错误消息,我仍然无法修复:

  

SignalR:notificationshub.Hello无法执行。错误:方法没有   发现:'Microsoft.AspNet.SignalR.Hubs.IHubCallerConnectionContext   Microsoft.AspNet.SignalR.Hub.get_Clients()”

有人可以让我知道我错过了什么吗?

提前谢谢!

安德烈

1 个答案:

答案 0 :(得分:1)

从2.1.0开始,get_Clients应该返回IHubCallerConnectionContext<dynamic>而不是IHubCallerConnectionContext

如果您针对SignalR&lt; = 2.03编译应用程序但在运行时加载SignalR&gt; = 2.10,则可能会发生错误。