首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用WCF和NetNamedPipeBinding实现工控机

利用WCF和NetNamedPipeBinding实现工控机
EN

Stack Overflow用户
提问于 2010-10-08 19:00:44
回答 4查看 3.6K关注 0票数 2

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

我做了一个简单的测试用例,其中主机用下面的net.pipe://localhost/SampleServer创建了一个端点:

代码语言:javascript
运行
复制
[ServiceContract]
public interface IWcfServer
{
    [OperationContract]
    void Log(string message);
}

插件在net.pipe://localhost/SampleClient上使用以下ServiceContract创建端点:

代码语言:javascript
运行
复制
[ServiceContract]
public interface IWcfClient
{
    [OperationContract]
    string Init();
}

下面是我如何设置每个端点的示例:

代码语言:javascript
运行
复制
this.server = new ServiceHost(this);
this.server.AddServiceEndpoint(typeof(IWcfServer), 
                               new NetNamedPipeBinding(), 
                               "net.pipe://localhost/SampleServer");
this.server.Open();

下面是我打电话的一个例子:

代码语言:javascript
运行
复制
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()

  • During
  1. 主机调用plugin.Init()的执行,插件尝试调用()

应用程序冻结,1分钟后我得到一个TimeoutException。有人知道我做错了什么吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-20 19:33:18

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

票数 3
EN

Stack Overflow用户

发布于 2010-10-09 08:51:33

1分钟是标准的wcf超时时间。

你有循环推荐信吗?

另外,当你打电话给正在监听的client.init时,为什么你有2份合同?

票数 0
EN

Stack Overflow用户

发布于 2010-10-10 06:03:16

打开WCF的E2E跟踪以检查确切的超时时间。- http://msdn.microsoft.com/en-us/library/ms733025.aspx。此外,您的方法可能会导致死锁,因为init可能需要日志,而日志可能要求init首先发生或类似的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3893516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档