【发布时间】:2016-06-04 19:54:21
【问题描述】:
我有 Windows 服务,它在计时器滴答声中运行任务。我还选择了通过 WCF 命名管道通道与 Windows 服务进行通信。我可以创建 WCF 服务实例并打开它进行收听。但是我如何通过 WCF 访问依赖于 Windows 服务的对象?
这是我的 Windows 服务的样子:
public partial class MyService : ServiceBase
{
private ServiceHost m_svcHost = null;
private myObject = null;
...
// Run this method from external WCF client
private void SomeMethod()
{
}
protected override void OnStart(string[] args)
{
if (m_svcHost != null) m_svcHost.Close();
m_svcHost = new ServiceHost(typeof(MyCommunicationService));
m_svcHost.Open();
// initialize and work with myObject
}
protected override void OnStop()
{
if (m_svcHost != null)
{
m_svcHost.Close();
m_svcHost = null;
}
}
}
所以我想要的是,当客户端进行查询时,可以访问 WCF 服务中的 myObject。甚至在 myObject 上运行一个方法。
【问题讨论】:
-
这个问题需要进一步澄清。添加显示您到目前为止进度的信息。您还试图访问哪些对象?
-
已更新。基本上我需要控制 Windows 服务活动,通过 WCF 服务查询其状态。
-
您只需要在
MyCommunicationService实例和您的Windows 服务实例之间建立一个命令通道。您可以通过多种方式实现这一点,例如通过静态属性。 -
我是否正确理解我必须打开 2 个通信通道,一个用于外部客户端,一个用于 Windows 服务?那么这个
MyCommunicationService将仅充当代理,对吗?这是 WCF 的常见模式吗? -
@Pablo 不,我并不是说您的 WCF 服务和它的主机之间需要额外的通信通道。您可以通过一个简单的静态属性实现这种通信,而无需任何抽象。
标签: c# wcf windows-services