在以下情况下使用WCF的良好做法是什么?
基本描述
有几个模块(程序)将提供WCF服务。每个应用程序可以启动多次。通常情况下,这些应用程序是从一种管理控制台启动的,但它们也可以手动启动。
WCF设置
我目前正在使用NetNamedPipeBinding。具有地址“net.pipe:// localhost”的ServiceHost和具有程序名称作为相对地址的端点。因此,要访问该服务,我会使用“net.pipe:// localhost / module1”。
我的问题
- 如何在启动同一模块的另一个实例时阻止获取AddressAlreadyInUseException?我的想法是为每个实例使用一个id。但后来我无法跟踪它们。 (例如,如果第一个实例已经关闭,module2将如何知道module1的哪个实例可用)。另一个想法是使用某种处理实例的全局模块。如果我决定让一个实例注册该服务而其他所有实例都将失败,我将遇到同样的问题。
- 模块如何向管理应用程序报告它已完成所有初始化?据我所知,CallbackContract只能用于在ServiceContract的Method调用期间调用回调。那么我是否必须在管理应用程序本身上启动服务?我认为管理应用程序是客户端而不是服务器,因为它不会一直可用。
醇>