Javascript 从SignalR2到phantomjs的跨域
本项目在SignalR v1.1.4上正常工作,客户机为phantomjs和cors:Javascript 从SignalR2到phantomjs的跨域,javascript,signalr,phantomjs,Javascript,Signalr,Phantomjs,本项目在SignalR v1.1.4上正常工作,客户机为phantomjs和cors: 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
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。
我在应用程序_Start()上删除RouteTable.Routes.MapHubs(新的HubConfiguration(){EnableCrossDomain=true}),并添加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.signar包都不会影响此问题。对于任何服务器信号器版本,客户端使用jquery.signalR-1.1.4.min.js都可以正常工作,使用jquery.signalR-1.2.1.min.js总是失败。在开始连接之前,您应该定义castTesk方法。此问题将在的“在添加订阅之前启动连接”部分中讨论 问题是,如果在定义
taskHub.client.castTesk
之前调用$.connection.hub.start()
,SignalR将不会向taskHub订阅客户端
您仍然可以调用属于TaskHub的服务器端方法,如RegisterAgent,但服务器将无法调用客户端方法,如castTesk
我还建议删除
$.support.cors=false
行。这将导致Signar始终使用JSONP而不是CORS,即使浏览器支持CORS。尝试启用客户端日志记录:这将为您提供更多诊断信息,您可以将其添加到问题中。谢谢您的建议。我启用了日志,最后一行信息是“调用taskhub.RegisterAgent”,无错误无警告
#……
taskHub.client.castTesk = (task) ->
#……
$.connection.hub.start().done ->
taskHub.server.registerAgent "xxx"
#……