2

私は Web ファーム用のアプリケーションを作成しており、サーバー アプリケーション間に単純なピア ネットワークを作成して、相互にメッセージをやり取りできるようにしたいと考えていました。たとえば、キャッシュ アイテムをドロップするときに調整したり、共有カウンターをインクリメントして、重要な統計情報をより適切に共有したりできます。

しかし、どうやらこれは不可能です。コンソール アプリケーションではピア ツー ピア コードが完全に機能していましたが、そのコードを ASP.NET Web サイトに追加すると、次のエラーが発生しました。

システム イベント通知は、現在のコンテキストではサポートされていません。たとえば、サーバー プロセスは、グローバル システム イベント通知をサポートしていない場合があります。

[InvalidOperationException: System event notifications are not supported under the current context. Server processes, for example, may not support global system event notifications.]
   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10259418
   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +539
   // My code here where I call the proxy object's method to start the WCF call

ええと、なぜですか?これは最高に重宝しそうです!

これを回避する方法はありますか?

4

2 に答える 2

1

サービスが実行されている IIS のバージョン (IIS を想定)。IIS 6 は、IIS 7 よりもかなり制限されており、HTTP アクティベーションのみをサポートしています。同様に、IIS 6 内からピア ツー ピア クライアントを起動しようとすると、同じ理由でブロックされる可能性があります。IIS は正しいワーカー プロセスに応答を送信できません。

サービスを常に Web サーバー上の Windows サービスとして実装し、名前付きパイプを使用して ASP.NET サイトと通信することができます。(Windows サービスはピアツーピア エンドポイントと名前付きパイプ エンドポイントをホストし、サイトは名前付きパイプ クライアントを使用します。サービスは [ServiceBehavior] 属性を使用して単一のインスタンスとして実行されます。

于 2010-03-06T06:56:00.470 に答える
0

バインディングがそのコンテキストを保持する方法のため、これが可能かどうかはわかりません。

通常の http wcf サービスを使用して各ホストを構成データベースに登録するか、トピックを使用して Web サーバーが処理する必要があるイベントを投稿することをお勧めします。

于 2010-07-18T01:43:46.830 に答える