永続的な接続とASP.NET JavaScriptクライアントを使用して、ページの提供元とは異なるサブドメインに接続しようとしています。
Webサーバーsub1.mydomain.com
のASP.Netページがsub2.mydomain.com
のSignalRに接続しようとしています。同じコードは、同じサブドメイン内で接続するときにうまく機能します。
クロスドメイン接続が有効になっている別の投稿を見つけました:
jQuery.support.cors = true;
しかし、これは私にはうまくいきませんでした。
永続的な接続とJavaScriptクライアントを使用して、2番目のサブドメインのSignalRに接続するにはどうすればよいですか?
機能させるには、次のいずれかを実行する必要があります。
$.connection.hub.url = 'http://subdomain.domain.com/signalr';
、サブドメインを指します。サーバーでクロスドメインを有効にします。
RouteTable.Routes.MapHubs(new HubConfiguration()
{
EnableCrossDomain = true
});
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クライアント を参照してください。
0.5.1から0.5.2に切り替える場合は、次のことが考えられます。
$.connection.hub.start({ transport: 'longPolling', xdomain: true }, function () {...
これは次のように変更できます。
$.connection.hub.start({ jsonp: true }, function () {...
Signalr2では、Microsoft.Owin.Corsのプレリリースを現在使用できます3.0.0-rc1 これを書いている時点では Microsoft.Owin.Cors です。
詳細はここにあります:
私の問題を本当に解決したのは:
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
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });