ホスト/プラグイン システムの IPC メカニズムとして使用する WCF を学習しようとしています。ホストはプラグインを呼び出して開始/停止できる必要があり、プラグインはサーバーを呼び出してロギングを実行する必要があります。
net.pipe://localhost/SampleServer
ホストが次の ServiceContract でエンドポイントを作成する簡単なテスト ケースを作成しました。
[ServiceContract]
public interface IWcfServer
{
[OperationContract]
void Log(string message);
}
そしてプラグインはnet.pipe://localhost/SampleClient
、次の ServiceContract でエンドポイントを作成します。
[ServiceContract]
public interface IWcfClient
{
[OperationContract]
string Init();
}
各エンドポイントの設定方法のサンプルを次に示します。
this.server = new ServiceHost(this);
this.server.AddServiceEndpoint(typeof(IWcfServer),
new NetNamedPipeBinding(),
"net.pipe://localhost/SampleServer");
this.server.Open();
そして、これが私がどのように呼び出しを行っているかのサンプルです:
ChannelFactory<IWcfClient> factory = new ChannelFactory<IWcfClient>(
new NetNamedPipeBinding(),
new EndpointAddress("net.pipe://localhost/SampleClient"));
IWcfClient client = factory.CreateChannel();
using ((IClientChannel)client)
{
client.Init());
}
ホストは を呼び出すことがplugin.Init()
でき、プラグインはhost.Log(message)
問題なく呼び出すことができることを確認済みです。ただし、次のシナリオが発生した場合:
- ホスト呼び出し plugin.Init()
- plugin.Init() の実行中に、プラグインは host.Log(message) を呼び出そうとします。
アプリケーションがフリーズし、TimeoutException
1 分後にエラーが発生します。誰が私が間違っているのかについて何か考えがありますか?