7

最近、プロジェクトを SignalR 2.0.0-beta1 から 2.0.0-rc1 にアップグレードしました。RC1 で、クロスドメイン リクエストのサポートの構成が変更されたことを理解しています。新しい構文を使用するようにプロジェクトを更新しましたが、ハブと通信しようとすると次のエラーが発生します。

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:7176is not allowed by Access-コントロール許可オリジン。

クライアント サイトは で実行されてhttp://localhost:7176おり、ハブは でコンソール アプリケーションを介してリッスンしていますhttp://localhost:8080。ここで何か不足していますか?RC1 にアップグレードする前は、クロス ドメイン リクエストが機能していました。

コンソール アプリのエントリ ポイント

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();
}

チャットサーバークラス

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

スタートアップ構成

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

4 に答える 4

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();
    });
});

これで、クロス ドメイン スクリプティングが有効になりました。これが他の誰かに役立つことを願っています。しばらくの間、私は本当に困惑していました。

于 2013-09-09T08:54:04.507 に答える
5

Microsoft.Owin 2.x 以降の場合:

Microsoft.Owin.Corsパッケージ マネージャー コンソールで次のコマンドを使用して、NuGet 経由でパッケージを追加します。

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();
于 2015-09-30T11:04:21.977 に答える
2

クロスドメインを処理する最良の方法はここに文書化されていると思います CrossDomain Signal R

于 2013-11-05T16:49:11.353 に答える