2

我正在用 C# 编写两个需要能够通信的应用程序(仅在一个方向上)。这两个应用程序将始终在同一台机器上运行,因此将 WCF 与命名管道一起使用并自托管 WCF 服务似乎是合乎逻辑的选择。

我知道我可以使用InstanceContextMode来配置服务实例是在每个会话、每个调用中实例化,还是应该只有一个实例。就我而言,我想要一个实例,因为我将只运行两个应用程序,因此将有一个客户端和一个服务器。

但这就是我卡住的地方。当我的客户拨打服务电话时,我正在这样做:

var myServiceFactory = new ChannelFactory<IMyService>(
    new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyService"));

IMyService myService = myServiceFactory.CreateChannel();
myService.DoStuff();

我不希望在服务器上创建新的服务器对象实例。相反,我希望myService指向已经在服务器上构建的(一个也是唯一的)IMyService 实例。目前,第二个 IMyService 实例被构建。

换句话说,我希望我的服务器对象由服务器构造(当服务器启动时),而不是在客户端第一次调用时。

谁能解释如何做到这一点?据我了解,.NET Remoting 使这很容易,而且 WCF 据说已经取代了 Remoting,所以必须有一个简单的方法......对吗?

4

1 回答 1

4

WCFServiceHost有一个构造函数,它采用服务类的单例实例而不是服务类型,正是为了这个目的。如果在服务主机中使用此构造函数,则必须将 InstanceContextMode 设置为 Singleton。

请注意,在您引用的客户端代码中,IMyService myService不是您所谓的“服务器对象”......它是客户端代理,WCF 通过它将消息从客户端路由到实际服务。

于 2012-08-28T09:06:01.973 回答