在我的主VS解决方案中,我有以下3个项目:
主机在控制台应用程序中托管WCFService(调试后将更改为Windows服务)。主机解决方案还有一个App.config,它为IDCCContract设置NetPipe绑定,为IMetaDataExchange配置设置MEX NetPipe绑定。
我的问题:我希望主机在运行后立即启动DCC服务,然后客户端可以使用WCF合同从该DCC服务实例访问数据。目前,DCC服务的新实例是在运行客户端的情况下创建的,这是我不想要的。
如何在主机开始时创建一次DCC服务实例,客户端可以使用WCF合同连接和读取该实例的数据?
答案 0 :(得分:9)
更改主机控制台测试应用程序以使用ServiceHost ctor的此重载:
public ServiceHost(
Object singletonInstance,
params Uri[] baseAddresses
)
并自己提供单例服务实例。
编辑:即替换设置服务主机的主机应用程序中的代码,例如:
var singletonInstance = new DCCService();
//... you could add stuff here to initialise your singleton instance as you would like it
using (ServiceHost host = ServiceHost(singletonInstance, baseAddresses))
{
...
您还需要将服务的InstanceContextMode设置为Single,例如将此属性应用于服务类:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
然后,您实例化的DCCService的特定实例将处理从客户端到DCC服务的所有WCF通信。
答案 1 :(得分:2)
在您的解决方案上,右键单击并选择“设置StartUpProjects”,您可以选择启动哪些项目和订单。始终先启动服务,然后选择客户端(复选框)
谢谢, 塞巴斯蒂安卡斯塔尔迪
有关详细信息,请查看此MSDN article for detail in configuring self-hosted services以进行调试。
答案 2 :(得分:0)
可能这个http://www.codeproject.com/KB/WCF/Sessions_in_WCF.aspxcould可能有助于理解克里斯的建议。此外,如果您想确保您有一个客户端实例,请参阅此链接How to maintain Session and same channel in WCF WebApplication。
答案 3 :(得分:0)
瑞恩
测试您的服务并查看它们的通信方式有助于将服务代码放在一个解决方案中,将客户端代码放在另一个Visual Studio实例上,这样您就不必处理首先启动的内容或者调用什么内容..也是分离问题的好方法
1打开一个新的visual studio实例,创建一个名为WCFService的解决方案,添加DCC服务和Host Console Test App(将其设置为Startup Project)。
2打开visual studio的新实例,并创建一个名为WCFClient和Client Console Test App的解决方案。
3在客户端“控制台测试应用程序”中,向“主机控制台测试应用程序”添加服务引用,或使用svcutil生成代理代码。
谢谢, 塞巴斯蒂安