次の方法で共有


.NET Framework リモート処理でのイベントとデリゲート

.NET Framework リモート処理ではイベントとデリゲートを使用できますが、これらを適切に使用するには、2 つの主要な問題に対処する必要があります。特に、IpcChannel で認証を使用する場合にのみ、イベントとデリゲートを使用してください。

デリゲートの使用

リモート処理デリゲートでは、対処する必要があるセキュリティ上の問題が発生します。クライアントがサーバーにデリゲートを渡すと (クライアントがイベント ハンドラをリモート イベントにアタッチするときに渡すのが最も一般的)、アタッチされたデリゲートは、サービスが意図したメソッドと同じシグネチャを持つ、認証されていないメソッドを参照することがあります。意図しないメソッドと意図したメソッドのシグネチャが一致するため、メソッドが静的メソッドであっても (したがって、リモート クライアントで呼び出すことはできません)、サービスは意図しないメソッドを呼び出す可能性があります。

この問題を軽減するには、サーバーはカスタム パラメータ型でデリゲートを定義する必要があり、その型を含むアセンブリが厳密な名前を持つ必要があります。さらに、このような通信は常に認証する必要があります (暗号化されていない場合)。意図した型であるかどうか不明な場合は、その型をサーバーで逆シリアル化することを許可しないでください。

イベントの使用

デリゲートに関するセキュリティ上の問題がある場合、イベントは使用しないことをお勧めします。代わりに、メソッドを公開するクライアント コールバック サービスを定義します。このメソッドは、サービスがクライアントと通信する必要がある場合に呼び出すことができます。前に説明したとおりにデリゲートを宣言している場合に、認証済みの IpcChannel でリモート イベントを使用するときは、クライアント イベント ハンドラのメソッドを一方向の呼び出しにする必要があります。これは、イベントが発生すると、サーバーはイベント呼び出しリストのデリゲートを呼び出すためです。イベント処理システムは、クライアントが返すかタイムアウトするまで、その呼び出しをブロックします。そのため、イベント ハンドラが一方向のメソッドでない場合、リッスンしていないクライアントによって単純なイベントのスループットが大幅に低下します。

関連項目

概念

リモート処理でのセキュリティ

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.