1

在以下场景中使用 WCF 的良好做法是什么?

基本说明

有几个模块(程序)将提供 WCF 服务。每个应用程序可以启动多次。通常情况下,此应用程序是从一种管理控制台启动的,但也可以手动启动。

WCF 设置

我目前正在使用 NetNamedPipeBinding。地址为“net.pipe://localhost”的 ServiceHost 和以程序名称作为相对地址的端点。因此,要访问该服务,我会使用“net.pipe://localhost/module1”。

我的问题

  1. 在启动同一模块的另一个实例时,如何防止出现 AddressAlreadyInUseException?我的想法是为每个实例使用一个 id。但后来我无法跟踪他们。(如果第一个实例已经关闭,那么 module2 如何知道 module1 的哪个实例可用)。另一个想法是使用某种处理实例的全局模块。如果我决定只让一个实例注册服务而所有其他实例都将失败,我将遇到同样的问题。
  2. 模块如何向管理应用程序报告它已完成所有初始化?据我了解,CallbackContract 只能用于在 ServiceContract 的方法调用期间调用回调。那么我必须在管理应用程序本身上启动服务吗?我认为管理应用程序是客户端而不是服务器,因为它不会一直可用。
4

0 回答 0