.NETアプリケーションは2つのAppDomainsを使用します。セカンダリドメインは、メインのappdomainで作成されたLoggerオブジェクトにアクセスする必要があります。NamedPipe WCFサービスを使用するとCommunicationObjectForted
このロガーは、名前付きパイプバインディングを使用してWCFサービスを介して公開されています。
これは私がこのサービスのために、「クライアント」を作成する方法である:
private void InitLogger()
{
if (loggerProxy != null)
{
Logger.Instance.onLogEvent -= loggerProxy.Log;
}
// Connect to the logger proxy.
var ep = new EndpointAddress("net.pipe://localhost/app/log");
var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
//Logger.Debug("Creating proxy to Logger object.");
var channelFactory = new ChannelFactory<ILogProvider>(binding, ep);
loggerProxy = channelFactory.CreateChannel();
channelFactory.Faulted += (sender, args) => InitLogger();
channelFactory.Closed += (sender, args) => InitLogger();
Logger.Instance.onLogEvent += loggerProxy.Log;
}
最近、我々はランダムCommunicationObjectFaultedExceptionを取得している - 私は、これは、チャネルの時代から私は行方不明です他のいくつかの理由からかにより発生したと仮定。
これは私が(おそらく、私はそれらを適切に使用していない)正常に動作しないように見える休館と障害が発生しイベントのハンドリングを追加した理由です。
EDIT:これらのイベントは、提案されているようにFactoryオブジェクトにあります。そのため、これらのイベントはなぜ発生していないのかが説明されています。
私の質問は - これらのエラーを回避するにはどうすればよいですか?
私たちのシナリオでは、アプリケーションの有効期間中いつでもこのチャンネルを開いたままにしておく必要があります。また、このLoggerサービスへのアクセスは常に必要とされます。
このような状況を処理する安全な練習はありますか?
ありがとうございます!すでにこのソリューションを提供していることをご存じのBCLまたはオープンソース実装のクラスがありますか? –