WebサーバーはSignalRを使用してクライアントでメソッドを同期的に呼び出すにはどうすればよいですか?ここで重要なのは、サーバーはクライアントがサーバーにデータを送り返すのを待ってから続行する必要があるということです。
基本的に、クライアントメソッドの呼び出しをWCFサービス要求のように扱うことを検討しています。クライアントを呼び出し、データが返されるのを待ちます。
WebサーバーはSignalRを使用してクライアントでメソッドを同期的に呼び出すにはどうすればよいですか?ここで重要なのは、サーバーはクライアントがサーバーにデータを送り返すのを待ってから続行する必要があるということです。
基本的に、クライアントメソッドの呼び出しをWCFサービス要求のように扱うことを検討しています。クライアントを呼び出し、データが返されるのを待ちます。
SignalRは、クライアント側のメソッドを同期的に呼び出す方法を提供しません。
同期呼び出しと同じ機能を実現するために、ある種の呼び出しIDを引数としてクライアント側のメソッドに渡すことができます。クライアントは、クライアント側のメソッドが実行されたときに、呼び出しIDを使用してClientMethodCompletedなどのサーバー側のメソッドを呼び出すことができます。基本的に、独自のACKを実装します。
このルートを使用する場合は、サーバー上のそれぞれのIDとともにクライアントの呼び出しを追跡する必要があります。その後、サーバー上のClientMethodCompletedメソッドで同期呼び出しを行った後に実行するロジックを実行できます。
1つのクライアントのみでメソッドを呼び出す場合、これはかなり単純なはずです。複数のクライアントでメソッドを呼び出す場合は、フォローアップコードを実行する前に、すべてのクライアントが呼び出しを確認したことを確認できるように、メソッドを呼び出しているクライアントを追跡する必要があります。
また、DOS攻撃についてまったく心配している場合は、未確認のクライアント呼び出しを格納するデータ構造を定期的にクリーンアップするようにします。これは、悪意のあるクライアントの爆発的なメモリ消費を引き起こす可能性のある明らかな攻撃ベクトルになるためです。