2014-02-24 134 views
0

這個項目工作,客戶端是phantomjs與CORS:跨域到phantomjs向右SignalR V1.1.4

webpage = require "webpage" 
websocket = webpage.create() 
serverUrl = "http://www.domain.com" 
websocket.injectJs './jquery-2.1.0.min.js' 
websocket.injectJs './jquery.signalR-1.1.4.min.js' 
websocket.includeJs serverUrl + '/signalr/hubs', -> 
    websocket.evaluate (serverUrl)-> 
     $.support.cors = false 
     $.connection.hub.url = serverUrl + '/signalr' 
     taskHub = $.connection.taskHub 
     $.connection.hub.start().done -> 
      taskHub.server.registerAgent "xxx" 
      #…… 
     taskHub.client.castTesk = (task) -> 
      #…… 
    , serverUrl 

,直到升級SignalR到V2.0.2。 我刪除RouteTable.Routes.MapHubs(新HubConfiguration(){EnableCrossDomain =真})上的Application_Start(),並添加Startup.cs:

[assembly: OwinStartup(typeof(SpiderMan.Startup))] 
namespace ProjectNamespace { 
    public partial class Startup { 
     public void Configuration(IAppBuilder app) { 
      app.Map("/signalr", map => { 
       map.UseCors(CorsOptions.AllowAll); 
       var hubConfiguration = new HubConfiguration { 
        EnableJSONP = true 
       }; 
       map.RunSignalR(hubConfiguration); 
      }); 
     } 
    } 
} 

然後$ .connection.hub.start()工作的權利始終,但是taskHub.client.castTesk()不能被觸發,沒有任何錯誤消息。

更新: V1.2.1就是工作也未能像V2.0.2。 而且,服務器上的任何版本的Microsoft.AspNet.SignalR軟件包都不能影響此問題。客戶端使用jquery.signalR-1.1.4.min.js正常工作,對於任何服務器signalR版本,總是會失敗,並始終使用jquery.signalR-1.2.1.min.js。

+0

嘗試啓用客戶端日誌記錄:http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#logging這應該給你更多的診斷信息你可以添加到你的問題。 – halter73

+0

感謝您的建議。我啓用日誌,最後一行信息是「調用taskhub.RegisterAgent」,沒有錯誤沒有警告 – zicjin

回答

1

在開始連接之前,您應該定義您的castTesk方法。此問題在SignalR Troubleshooting Guide的「訂閱添加之前開始的連接」部分進行了討論。

#…… 
taskHub.client.castTesk = (task) -> 
    #…… 
$.connection.hub.start().done -> 
    taskHub.server.registerAgent "xxx" 
    #…… 

的問題是,如果你打電話$.connection.hub.start()定義taskHub.client.castTesk之前,SignalR不會訂閱客戶到TaskHub。

您仍然能夠調用屬於TaskHub如RegisterAgent服務器端方法,但服務器將無法調用客戶端的方法,如castTesk。

我也建議去除$.support.cors = false線。這將導致SignalR始終使用JSONP而不是CORS,即使瀏覽器支持CORS。