注意:最初有人问过这个问题,但在我发布答案之前将其删除。由于这个问题涵盖了开发人员在尝试使 SignalR 跨域工作时面临的许多问题,因此我决定复制它。另外,我已经写完答案了!
我在 ASP.NET MVC .NET Framework 4 项目中运行 SignalR 1.0.1 服务器。我在另一个域(不同的本地主机端口)上有另一个 ASP.NET 应用程序,试图通过 JavaScript 客户端进行连接。当我的应用程序尝试连接时,我得到了这个:
XMLHttpRequest cannot load http://localhost:31865/api/negotiate?_=1363105027533.
Origin http://localhost:64296 is not allowed by Access-Control-Allow-Origin.
我已按照所有步骤启用 SignalR 的跨域支持——我错过了什么?
jQuery.support.cors = true;
$.connection('http://localhost:31865/api', '', false, { jsonp: true, xdomain: true });
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
RouteTable.Routes.MapConnection<ApiConnection>("/api", "api");
我还在 API 项目的 Web.config 中添加了以下内容:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
我正在为我的 SignalR 服务器使用 PersistentConnection,而不是集线器。
有任何想法吗?