127.0.0.2:81 でエミュレーターで実行されている MVC 4 アプリケーションである Azure Web ロールでホストされている SignalR ハブ (EventHub という名前) を持っています。私の Application_Start には、次のものがあります。
RouteTable.Routes.MapHubs(new HubConfiguration { EnableCrossDomain = true });
localhost:1003 で IIS 経由で実行されている JS クライアントでは、次のようになります。
$.connection.hub.url = 'http://127.0.0.2:81/signalr';
$.connection.hub.start().done(alert('connected'));
クライアントはハブに接続してメソッドを呼び出すことができますが、コンソールには次のように表示されます。
XMLHttpRequest cannot load http://127.0.0.2:81/signalr/reconnect?transport=longPolling&connectionToken…&tid=0&_=1380138173967. Origin http://localhost:1003 is not allowed by Access-Control-Allow-Origin.
クライアントは最終的に自分自身を切断します。同じクライアントとほぼ同じハブ実装を使用し、localhost:62835 のスタンドアロン MVC アプリで実行すると、クロスオリジン エラーはまったく発生しません。これをChrome v29で実行しています。カスタムヘッダーを指定しておらず、jquery cors サポートを true に設定していません。
紺碧のエミュレーターが引き起こしているねじれはありますか? もしそうなら、それを回避する方法はありますか?
アップデート:
Web ロールを Azure に発行しましたが、cors はその環境で動作しているようです。さらに、Chrome は、エミュレーターがホストするサイトに接続するときに試行されていたロングポーリングの代わりに、websockets を使用して接続するようになりました。
ローカル テスト用にエミュレータを介してこれを実行できるようにしたいので、それを機能させる方法について何かアイデアがあれば、よろしくお願いします。