SignalR连接问题

时间:2013-07-11 05:26:28

标签: asp.net signalr

我在使用SignalR(1.1.2)时遇到了一些问题,试图创建一个基本的实时聊天设置,并在花了大约一个星期后(包括通过SignalR源进行拖网)我有点结束了什么我可以试试......

我(我认为)是一个相当复杂的SignalR设置,包括:

  • 负载均衡服务器
  • Redis消息总线
  • 每台服务器上有两个站点(ASP.NET Webforms VB.NET桌面站点和MVC3 C#移动站点)

每个站点都包含自身的中心和其他站点,因此每个页面都可以向每个站点发送消息。

查看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); });
            });
        });
    }

1 个答案:

答案 0 :(得分:1)

来自SignalR troubleshooting document

  

“连接ID格式不正确”或“用户身份”   在活动的SignalR连接期间无法更改“错误

     

如果正在使用身份验证,则可能会看到此错误   在连接停止之前注销。解决方案是   在记录客户端之前停止SignalR连接。