gpt4 book ai didi

wcf - 使用 WCF 和 NetNamedPipeBinding 进行 IPC

转载 作者:行者123 更新时间:2023-12-04 06:44:14 25 4
gpt4 key购买 nike

我正在尝试学习 WCF 以将其用作主机/插件系统的 IPC 机制。主机需要能够调用插件来启动/停止它,插件需要回调服务器来执行日志记录。

我做了一个简单的测试用例,主机在 net.pipe://localhost/SampleServer 上创建端点使用以下服务契约(Contract):

[ServiceContract]
public interface IWcfServer
{
[OperationContract]
void Log(string message);
}

该插件在 net.pipe://localhost/SampleClient 上创建一个端点使用以下服务契约(Contract):
[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分钟后。有人对我做错了什么有任何想法吗?

    最佳答案

    服务主机的 InstanceContextMode 是什么?如果它是单例,它将阻塞直到 Init() 返回 - 导致循环依赖。

    关于wcf - 使用 WCF 和 NetNamedPipeBinding 进行 IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893516/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com