使用WCF服务访问承载WCF服务的Windows服务中的数据
我显然是WCF和Windows服务的新品。使用WCF服务访问承载WCF服务的Windows服务中的数据
我有一个Windows服务,每秒钟只增加一个整数变量。例如,我想编写一个简单的Windows窗体客户端来在标签控件中显示变量的当前值。
我开始相信解决这个问题的答案是WCF服务。
我想在Windows服务中托管此WCF服务,但我不知道如何将所有内容链接在一起。 WCF服务包含对Windows服务的引用,以便它可以访问整型变量的值。
但是,我不需要在Windows服务中引用WCF服务来托管它吗?我如何避免循环依赖?
我不一定需要特定的代码 - 我只需要知道在概念上是否可以做我想做的事情以及如何做。
感谢您提供任何帮助!
我回去重写了一切。我完全不满意将所有内容放在同一个程序集中,因此我重新设计了整个应用程序。
下面是我终于架构此解决方案:
我结束了五个项目在此解决方案(SIX,如果算上我用于测试的控制台应用程序):
- 计数器逻辑 - 桥接 我的客户(S)和服务器
- Windows服务之间的间隙的部分 - 执行实际时间 和递增
- WCF服务程序的一部分 - 承载 WCF服务,我的柜台逻辑部分
- Windows窗体客户端 - 前端 是通过WCF与我的Windows服务通信
- 接口&数据合同 - 为WCF操作契约和数据契约
这些项目相互引用以下列方式:
- 计数器逻辑 - 的引用接口&数据契约
- WCF服务 - 引用接口&数据契约
- Windows服务 - 引用计数器逻辑,WCF服务和接口&数据契约
- Windows窗体客户端 - 引用接口&数据契约
- 接口&数据合同 - 引用没有其他项目
Windows服务为WCF服务和计数器逻辑提供宿主环境。 Windows服务需要引用WCF服务以实例化并托管它; WCF服务需要引用Windows服务才能访问计数器逻辑中的整数变量。
为了打破,而不是在WCF服务引用Windows服务此循环依赖,我发送到从Windows服务的WCF服务,当我创建ServiceHost的对象的计数器逻辑实例的引用:
在Windows服务项目:
protected override void OnStart(string[] args)
{
if (_serviceHost != null)
{
_serviceHost.Close();
}
_counterObject = new CounterClass();
_counterObject.StartCounting();
_wcfService = new CounterWCFService(_counterObject);
_serviceHost = new ServiceHost(_wcfService);
_serviceHost.Open();
}
至少有一个缺点这种方案,但是。为了将Counter Logic实例作为参数传递给WCF服务,我无法使用接受WCF服务类型的典型ServiceHost构造函数。这个构造函数只能在WCF服务的构造函数是无参数时使用。相反,我使用了接受WCF服务实例的重载构造函数。这就是为什么我在将WCF服务传递给ServiceHost之前实例化WCF服务并将_counterObject作为参数传递的原因。
这将我们限制为一个指定为Singleton(InstanceContextMode = Single)的WCF服务。由于在任何时候都只有一个客户端访问我的服务,这对我来说是可以接受的,但我需要调查其他方法来访问标准ServiceHost构造函数创建的WCF服务实例,如果我希望我的未来应用程序可扩展。
这个解决方案现在对我来说非常完美,而且由于将所有各个部分放在他们自己的项目中提供了模块化特性,它允许我创建一个控制台应用程序来托管Counter Logic和WCF服务进行测试,以及。
之前,我在我的机器上安装Windows服务,我能够调试一切都在控制台应用程序,这样我只需要安装我服务一次,并启动它。
你是怎么过的计数器对象的WCF服务,而不在WCF服务对象的计数器参考?
_counterObject = new CounterClass();
_counterObject.StartCounting();
_wcfService = new CounterWCFService(_counterObject);
这种冲突从上面的项目参考表:
这些项目相互引用以下列方式:
Counter Logic - references Interfaces & Data Contracts
WCF Service - references Interfaces & Data Contracts
Windows Service - references Counter Logic, WCF Service, and Interfaces & Data Contracts
Windows Forms Client - references Interfaces & Data Contracts
Interfaces & Data Contracts - references no other project
我试图找出引用获取间通过WCF接口的服务与计数器类进行通信。
我在这里没有看到任何问题,请阅读:https://msdn.microsoft.com/en-us/library/ms733069(v = vs.110).aspx – Matt 2015-02-09 22:17:24
这与我的肯定不同在所有其他地方都可以看到,因为一切都包含在一个项目中。我已经把所有的东西都分解成了不同的项目。 – 2015-02-10 00:31:01
那么你的wcf服务是独立的exe?或者一个DLL? – Matt 2015-02-10 14:04:45