2012-03-17 87 views
8

我试图获得跨域工作的基本示例,但我无法让它正常工作。根据https://github.com/SignalR/SignalR/issues/6这个人的说法,他通过添加一个Access-Control-Allow-Origin标题来实现它的工作。跨域的SignalR

基本上,我已经为mvc 3应用程序添加了一个集线器,在web.config中添加了上述标题,并创建了一个发送消息的页面。这个设置工作正常。 接下来,我创建了使用页面上的相同客户端的JavaScript不同的Web应用程序,但是URL设置为使用不同的服务器:

$.connection.hub.url = 'http://www.myserver.com/signalr'; 

只要我用它停止工作远程URL。

如何让SignalR跨域工作?

更新: 一些额外的信息,上面的方法也适用于Chrome和Firefox,但IE9不会喜欢它......

+0

您正在测试哪个浏览器?并非所有浏览器都支持'Access-Control-Allow-Origin'标头。 – 2012-03-18 10:32:48

+0

我一直在使用IE9和Chrome – 2012-03-18 14:16:34

回答

9

我得到它的工作使用一个简单的测试项目和Internet Explorer 9,但那一点都不不容易,首先我挂在你描述的同样的问题上。我认为你几乎在那里,你只是在你的JavaScript中缺少以下行:

jQuery.support.cors = true; 

它告诉jQuery做跨域调用。看起来很简单,但真的很难找到;-)

我解释一切我在blog post做的步骤,因为我没有找到关于这个主题的现有信息为止。

如果还有其他问题,告诉我。我有一个在Internet Explorer 9中运行的工作测试项目,我可以向您发送。

+0

谢谢,它的工作!它确实在永远帧的背景中抛出一个拒绝访问异常(var $ = window.parent.jQuery),并且用户得到一个弹出消息以允许cors,但它发送并接收消息! – 2012-03-30 05:46:13

+0

奇怪的是,我没有得到任何弹出消息...这是在IE或其他浏览器?很高兴它的工作原理:-) – aKzenT 2012-03-30 10:15:28

+0

这确实在IE9中。我希望他们很快就能在SignalR中获得正式的跨域支持:) – 2012-03-31 07:14:48