1

私はしばらくの間signalRを使用してきましたが、これは私が遭遇した問題の最初の例です。

ドメイン「x」のクライアントがドメイン「y」のハブサーバーに接続されています。すべてが順調です...しかし、Client.Group(groupID).someMethodを使用してクライアント側のメソッドを呼び出そうとすると、ハブドメインの外部から接続されたクライアントが応答を受け取りませんか?ただし、Client.All.someMethodを使用すると、すべてが正常に機能します(クライアントは応答を受け取ります)。

グループとクロスドメインのサポートに関して、何かが足りませんか?

また、外部ドメインからサーバーハブへの接続を取得するのに少し問題がありました。githubの例では、ヘッドの参照が次のようになるかどうかが明確ではありませんでした。

<script src="http://localhost:61215/signalr/hubs" type="text/javascript"></script>

また

<script src="/signalr/hubs" type="text/javascript"></script>

後者は機能しませんでした...

前もって感謝します

4

1 に答える 1

5

グループに関する問題は、クライアントが再接続したときにグループが自動的に再参加しないという事実に関係している可能性があります。同じドメインで実行している場合、これは問題ではありません。クライアントは、基盤となる接続に問題がない限り再接続されない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が含まれているため、機能しません。

于 2013-02-12T19:15:19.037 に答える