我在使用SignalR(1.1.2)时遇到了一些问题,试图创建一个基本的实时聊天设置,并在花了大约一个星期后(包括通过SignalR源进行拖网)我有点结束了什么我可以试试......
我(我认为)是一个相当复杂的SignalR设置,包括:
每个站点都包含自身的中心和其他站点,因此每个页面都可以向每个站点发送消息。
查看Chrome检查器(在移动网站上的此示例中),已加载集线器,移动设备的协商步骤已成功,但连接尝试在3秒后失败并显示错误:
EventSource的响应的MIME类型(“text / html”)不是“text / event-stream”。中止连接。
这当然是我们在Microsoft.Owin.Host.SystemWeb抛出后的自定义500错误页面:
连接ID的格式不正确。
一旦发生这种情况,大部分时间都会进入某种奇怪的循环,它将继续抛出数百个这样的错误并发送大量的ping,然后是longPolling连接
该解决方案在我的开发环境(单个IIS实例)中运行良好,但转移到负载平衡测试环境是我看到错误的地方。
我不知道是否还有其他任何我可以添加的内容可能有所帮助,但我很乐意添加它。
<小时/> 我已将以下内容添加到两个站点上的web.config文件中:
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"/>
和
<add name="Access-Control-Allow-Origin" value="*"></add>
<add name="Access-Control-Allow-Headers" value="Content-Type" />
global.asax文件包含:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
RedisScaleoutConfiguration redisConfig = new RedisScaleoutConfiguration([redisIP], [port], String.Empty, "Name");
redisConfig.Database = 9;
GlobalHost.DependencyResolver.UseRedis(redisConfig);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
HubConfiguration hubConfig = new HubConfiguration();
hubConfig.EnableCrossDomain = true;
hubConfig.EnableDetailedErrors = true;
RouteTable.Routes.MapHubs(hubConfig);
<snip>
}
我所拥有的JS代码如下:
function setUpSignalR() {
//Set up the connections
webConnection = $.hubConnection(pageInfo.webUrl);
mobConnection = $.hubConnection(pageInfo.mobUrl);
//Get the hubs for web and mobile
webHub = webConnection.createHubProxies().messagingHub;
mobHub = mobConnection.createHubProxies().messagingHub;
//Hook up the call back functions
<snip>
//Now, start it up!
mobConnection.logging = true;
mobConnection.start().done(function() {
mobHub.server.joinConversation(pageInfo.conversationGuid, "mobile").fail(function (error) { console.log('JoinConversation for mobile connection failed. Error: ' + error); });
webConnection.start().done(function() {
webHub.server.joinConversation(pageInfo.conversationGuid, "mobile").fail(function (error) { console.log('JoinConversation for web connection failed. Error: ' + error); });
});
});
}
答案 0 :(得分:1)
来自SignalR troubleshooting document:
“连接ID格式不正确”或“用户身份” 在活动的SignalR连接期间无法更改“错误
如果正在使用身份验证,则可能会看到此错误 在连接停止之前注销。解决方案是 在记录客户端之前停止SignalR连接。