小编fee*_*ird的帖子

SignalR + Node WebKit/Node在通过身份验证时无法通过websockets连接

这是一个管理一堆webkit窗口的节点webkit应用程序.每个webkit窗口都使用signalR连接到MVC/webApi/signalR堆栈,没有任何问题.每个窗口通过websockets连接到1-3个集线器.一切都很好.

我的客户希望在管理所有其他窗口的基本节点应用程序中使用SignalR.事情变得"有趣"......

因此,虽然节点应用程序在webkit环境中运行,但它是从文件系统提供的(header:origin = file://)

所以我已经启动了signalR(没有JSONP,因为我的目标是websockets)

app.Map("/signalr", map =>
           {
                map.UseCors(CorsOptions.AllowAll);
                var hubConfiguration = new HubConfiguration();

                map.RunSignalR(hubConfiguration);
            });
Run Code Online (Sandbox Code Playgroud)

因此,当我在用户登录到从Node生成的一个窗口之前连接到节点应用程序时,signalR通过websockets连接正常,并且我们在登录时没有收到任何错误(即用户已更改身份).

  var connection = window.$.hubConnection("http://localhost");
  connection.logging = true;
  connection.start()
        .done(function () { console.log('Now connected, connection ID=' + connection.id); })
        .fail(function () { console.log('Could not connect'); });
Run Code Online (Sandbox Code Playgroud)

问题是我在HubCallerConext服务器端没有身份.

因此,如果用户首先登录,那么节点应用程序将在另一个衍生窗口中创建cookie,这就是事情变得奇怪的地方.SignalR无法通过websockets连接以下错误(来自fiddler)

无法识别的用户身份.在活动的SignalR连接期间,用户身份不能更改.

这是协商调用,然后是通过websockets连接(升级)的失败调用. 我有一个fiddler规则用localhost替换Origin:file://.以防这是影响它.

GET http://localhost/signalr/negotiate?clientProtocol=1.4&connectionToken=qs09pHGxr6x5fff1GJ%2FChWUnpSLX5ljV8FuS3h06P%2FhpS55cjNvh2uFHHTXukDI%2BK%2BcgsC6%2BWVJHba4xrkt6IVc2KwGIfm4eeyHrigNFRotjBYKb&connectionData=%5B%7B%22name%22%3A%22windowmanagementhub%22%7D%5D&_=1429572950768 HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: text/plain, */*; q=0.01
 X-DevTools-Emulate-Network-Conditions-Client-Id: 2E81759B-036D-4E92-ADF4-865AFBF59D2
 User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36
 Content-Type: application/x-www-form-urlencoded; charset=UTF-8
 Accept-Encoding: …
Run Code Online (Sandbox Code Playgroud)

asp.net node.js signalr node-webkit

5
推荐指数
0
解决办法
697
查看次数

标签 统计

asp.net ×1

node-webkit ×1

node.js ×1

signalr ×1