グループに関する問題は、クライアントが再接続したときにグループが自動的に再参加しないという事実に関係している可能性があります。同じドメインで実行している場合、これは問題ではありません。クライアントは、基盤となる接続に問題がない限り再接続されないforever-frameまたはserver-sent-eventsトランスポートを使用している可能性が高いためです。
ただし、SignalRへのクロスオリジンアクセスには、WebSocketまたはロングポーリングトランスポートのいずれかが必要です。後者は、グループで発生している問題を考慮すると、あなたのケースで使用されている可能性があります。(注:WebSocketをサポートするには、SignalRサーバーがWindows8または2012で.NET4.5を実行している必要があります)。ロングポーリングトランスポートは、メッセージを受信するたびにSignalRサーバーに再接続する必要があります。
この問題を次のように修正するには:
namespace MySignalRApplication
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalHost.HubPipeline.EnableAutoRejoiningGroups();
}
}
}
電話をかけるGlobalHost.HubPipeline.EnableAutoRejoiningGroups()
ことで、クライアントが再接続したときにグループに再参加できるようになります。ただし、RC2の時点でのSignalRは、再接続しているクライアントが以前に再参加しようとしているグループに含まれていたことを確認しません。もちろん、正常に動作しているクライアントは、以前に存在していたグループに再参加しようとするだけですが、RC2で自動グループ再参加を有効にすると、攻撃者は自分自身を任意のグループに追加できます。これは多くのアプリケーションにとって問題ではありませんが、グループの再参加がデフォルトで有効になっていないのはそのためです。
SignalRのRTMバージョンでは、グループの自動再参加がデフォルトで有効になります。クライアントが再参加しようとするグループのリストもサーバーによって署名されるため、サーバーの安全性が大幅に向上します。
2番目の質問について:
提供されているHTMLとは異なるドメインでホストされているJavaScriptをロードする場合は常に、スクリプトsrcに絶対URLが含まれている必要があります。
<script src="/signalr/hubs" type="text/javascript"></script>
上記には相対URLが含まれているため、機能しません。