我有一个WCF服务,它是一个单例,它管理另一个基于会话的WCF服务的代理集合。单例创建一个新的代理并传递一些工作要做,并且基于会话的服务在某些活动完成时调用回单例服务(几乎所有的OperationContract方法都是单向的)。典型的完成路径是单例在进程完成时从硬件设备接收事件,并在基于会话的服务上调用一个方法,该方法返回最终状态,然后处理其代理。当遇到错误情况并且基于会话的服务无法继续执行它需要做的事情时,我需要回调单例以让它知道处置与该实例关联的代理。但是,为了使WCF方法回调单例,我需要创建一个返回单例的代理。我所看到的是单例按预期处理其代理,但每当我尝试处理它时基于会话的服务创建的单例的代理超时。由于会话以该方法调用结束并且实例将被处理掉,如果它创建的代理没有被正确处理,这是否重要?
答案 0 :(得分:0)
处置WCF服务与处理实现IDisposable
的任何其他对象不同。当服务处于良好状态时可以处置该服务,但是当发生故障时,dispose方法将抛出另一个异常。
Some insight is here也许使用the WCFProxyGenerator,但我还没有尝试过
不确定基于会话的服务是否存在问题,以及它是否与WCF服务不同。
我的建议不是使用单例,而是使用依赖注入来为使用WCF服务的类提供工厂,因此当它需要服务时它可以创建它。当发生故障时,它可以扔掉旧的并创建一个新的。没有看到一些代码,很难看出这是否可能。