web-dev-qa-db-ja.com

SignalRでクロスドメイン接続(CORS-Access Control Allow Origin)を使用する方法

永続的な接続とASP.NET JavaScriptクライアントを使用して、ページの提供元とは異なるサブドメインに接続しようとしています。

Webサーバーsub1.mydomain.comのASP.Netページがsub2.mydomain.comのSignalRに接続しようとしています。同じコードは、同じサブドメイン内で接続するときにうまく機能します。

クロスドメイン接続が有効になっている別の投稿を見つけました:

jQuery.support.cors = true;

しかし、これは私にはうまくいきませんでした。

永続的な接続とJavaScriptクライアントを使用して、2番目のサブドメインのSignalRに接続するにはどうすればよいですか?

24
codezoo

機能させるには、次のいずれかを実行する必要があります。

  • セットアップ $.connection.hub.url = 'http://subdomain.domain.com/signalr';、サブドメインを指します。
  • サーバーでクロスドメインを有効にします。

    RouteTable.Routes.MapHubs(new HubConfiguration()
    {
      EnableCrossDomain = true
    });
    
37
Piotr Szmyd

SignalRの現在のバージョンでは、別のCORSパッケージを使用して、このAPIが次のように変更されました。

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

ASP.NET SignalRハブAPIガイド-JavaScriptクライアント を参照してください。

11
Ian Mercer

0.5.1から0.5.2に切り替える場合は、次のことが考えられます。

$.connection.hub.start({ transport: 'longPolling', xdomain: true }, function () {...

これは次のように変更できます。

$.connection.hub.start({ jsonp: true }, function () {...
7
ElHaix

Signalr2では、Microsoft.Owin.Corsのプレリリースを現在使用できます3.0.0-rc1 これを書いている時点では Microsoft.Owin.Cors です。

詳細はここにあります:

4
anAgent

私の問題を本当に解決したのは:

1-これをglobal.asaxに追加します。

RouteTable.Routes.MapHubs(new HubConfiguration() { 
    EnableCrossDomain = true 
});

2-クロスドメインを有効にするために、私のWebプロジェクトのweb.configを設定します。

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="*" />
            <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

3-次に、htmlの実装を変更し、$。connection()を次のように変更します。

var connection = $.hubConnection('http://localhost.my:8081/signalr');
var chatHubProxy = connection.createHubProxy('chatHub');

私が使用しているバージョン:

  • signalR-1.1.0

  • jquery.signalR-1.1.3.js

  • dot.net 4.0

2
Claudio Santos
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client

1
jlp