2010-04-06 73 views
1

我有一个WCF服务,这是一个单以及管理代理到另一个WCF服务的集合,它是基于会话的。单例创建一个新的代理,并将其传递一些工作要做,和基于会话的业务进行调用回单服务时,某些活动完成(几乎所有的OperationContract的方法是单向的)。典型的完成路径是当进程完成时单身人士从硬件设备接收事件,并且它在基于会话的服务上调用返回最终状态的方法,然后处置其代理。当遇到一个错误状况和基于会话的服务无法与它所需要做下去,我需要打个电话回单,让它知道处置与该实例相关联的代理权。但是,为了让WCF方法回到单身人士,我需要创建一个代理回单身人士。我所看到的情况是,单身人士按预期处理其代理,但每当我尝试处理它时,基于会话的服务创建的单身代理都会超时。由于会话以该方法调用结束并且实例将被处置,因此如果它创建的代理没有得到正确处理,它是否重要?不处理WCF代理?

回答

0

处置WCF服务的是不一样的实现IDisposable任何其他对象的配置。在处于良好状态时处理服务是可以的,但当发生故障时,处理方法会抛出另一个异常。 Some insight is here也许使用the WCFProxyGenerator但我还没有尝试过

不确定基于会话的服务的问题以及它是否与WCF服务不同。

我的建议是不要用一个单身,但使用依赖注入给使用WCF服务工厂,所以当它想它可以创建它的服务的类。当发生故障时,可以丢弃旧的并创建一个新的。没有看到一些代码,很难看到这是否可能。

+0

它在这一点上其实实际意义,基于会话的WCF服务最终彻底改变这些类之间的相互作用,以及整体结构被彻底淘汰。更改Singleton到每个呼叫服务也不是一种选择;它被设置为一个Singleton,因为它被绑定到一个C++类,该类与一个引发需要处理的事件的硬件设备接口。不过,对于它的价值,我从来没有看到任何不把代理转交给Singleton的不良后果。 – 2011-03-30 22:28:30

+0

好的,很高兴知道 – aqwert 2011-03-30 23:27:21