我是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()”
有人可以让我知道我错过了什么吗?
提前谢谢!
安德烈
答案 0 :(得分:1)
从2.1.0开始,get_Clients应该返回IHubCallerConnectionContext<dynamic>
而不是IHubCallerConnectionContext
。
如果您针对SignalR&lt; = 2.03编译应用程序但在运行时加载SignalR&gt; = 2.10,则可能会发生错误。