初学者WCF实施问题

Rya*_*n R 1 c# wcf

在我的主要VS解决方案中,我有以下3个项目:

在此输入图像描述

主机在控制台应用程序中托管WCFService(调试后将更改为Windows服务).主机解决方案还有一个App.config,它为IDCCContract设置NetPipe绑定,为IMetaDataExchange配置设置MEX NetPipe绑定.

我的问题:我希望主机在运行后立即启动DCC服务,然后客户端可以使用WCF合同从该DCC服务实例访问数据.目前,DCC服务的新实例是在运行客户端的情况下创建的,这是我不想要的.

如何在主机开始时创建一次DCC服务实例,客户端可以使用WCF合同连接和读取该实例的数据?

Chr*_*son 9

更改主机控制台测试应用程序以使用ServiceHost ctor的此重载:

public ServiceHost(
    Object singletonInstance,
    params Uri[] baseAddresses
)
Run Code Online (Sandbox Code Playgroud)

并自己提供单例服务实例.

编辑:即替换主机应用程序中的代码,用于设置服务主机,如:

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))
{
...
Run Code Online (Sandbox Code Playgroud)

您还需要将服务的InstanceContextMode设置为Single,例如将此属性应用于服务类:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Run Code Online (Sandbox Code Playgroud)

然后,从客户端到DCC服务的所有WCF通信都将由您实例化的DCCService的特定实例处理.