跨域请求在SignalR 2.0.0-rc1中不起作用

时间:2013-08-27 17:25:15

标签: c# signalr cors

我最近将一个项目从SignalR 2.0.0-beta1升级到2.0.0-rc1。据我所知,在RC1中,对跨域请求的支持配置发生了变化。我已经更新了我的项目以使用新语法,但是在尝试与我的集线器通信时,我现在收到以下错误:

  

XMLHttpRequest无法加载   = 1377623738064" > HTTP://本地主机:8080 /谈判connectionData =%5B%7B%22name%22%3A%22chathub%22%7D%5D&安培; clientProtocol = 1.3&安培; = 1377623738064?。   来源http://localhost:7176不被允许   访问控制允许来源。

客户端站点正在http://localhost:7176运行,并且集线器正在http://localhost:8080处通过控制台应用程序进行侦听。我在这里错过了什么吗?在我升级到RC1之前,跨域请求正在运行。

CONSOLE APP ENTRY POINT

static void Main(string[] args)
{
    var chatServer = new ChatServer();
    string endpoint = "http://localhost:8080";

    chatServer.Start(endpoint);

    Console.WriteLine("Chat server listening at {0}...", endpoint);
    Console.ReadLine();
}

CHATSERVER CLASS

public class ChatServer
{
    public IDisposable Start(string url)
    {
        return WebApp.Start<Startup>(url);
    }
}

STARTUP CONFIGURATION

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);
            map.RunSignalR(new HubConfiguration { EnableJSONP = true });
        });
    }
}

4 个答案:

答案 0 :(得分:8)

您的客户端配置出了问题。

XMLHttpRequest cannot load =1377623738064">http://localhost:8080/negotiate?connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&clientProtocol=1.3&=1377623738064. Origin http://localhost:7176 is not allowed by Access-Control-Allow-Origin.

协商请求应该http://localhost:8080/signalr/negotiate?...而不是http://localhost:8080/negotiate?...。要解决此问题,您可以在调用$ .connection.hub.start之前尝试以下操作:

$.connection.hub.url = http://localhost:8080/signalr;

答案 1 :(得分:8)

不确定此问题是否已得到充分解答,但我对Microsoft提供的示例进行了以下更改:

public void Configuration(IAppBuilder app)
        {
            var config = new HubConfiguration();
            config.EnableJSONP = true;
            app.MapSignalR(config);
        }

我在JS示例中添加了以下内容:

$.connection.hub.start({ jsonp: true }).done(function () {
    $('#sendmessage').click(function () {
        // Call the Send method on the hub.
        chat.server.send($('#displayname').val(), $('#message').val());
        // Clear text box and reset focus for next comment.
        $('#message').val('').focus();
    });
});

现在启用了跨域脚本编写。希望这有助于其他人,我有一段时间对它感到困惑。

答案 2 :(得分:4)

萨拉姆。

for Microsoft.Owin 2.x及更高版本:

在程序包管理器控制台中通过此命令通过NuGet添加Microsoft.Owin.Cors程序包:

PM> Install-Package Microsoft.Owin.Cors

然后using Startup类文件中的using Microsoft.Owin; using Microsoft.Owin.Cors;

// app.MapHubs(new HubConfiguration { EnableCrossDomain = true });
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();

然后更改您的源代码:

var fs = require('fs');
var XLS= require('xlsx');

var book = XLS.readFile('test.xlsx');

var sheet_name_list = book.SheetNames[0];
var Sheet1 = book.Sheets[sheet_name_list];
//console.log(Sheet1);


var j = XLS.utils.sheet_to_json(Sheet1['A17']);
console.log(j);

答案 3 :(得分:2)

我认为这里记录了处理跨域的最佳方法 CrossDomain Signal R