我目前正在从事的项目中,我们有超过30种wcf服务,这些服务在我们的Web应用程序中被大量调用,我们遇到了性能问题,其中一种解决方案是缓存代理。所以我们所做的是创建一个字典对象并使用端点名称作为键,缓存通道工厂对象,以便后续调用将从缓存中提取,而不是在每次调用时重新实例化通道工厂对象。在其他论坛上有很多实现。
但我们遇到了一个问题,我们的系统设置方式是我们的服务驻留在一个或多个服务器上,其中只有一个服务器在任何时间都处于活动状态,如果服务器出现故障,则另一个服务器用作故障安全。在放入缓存之前创建通道工厂时,我们可以获取给定服务的最新端点地址,然后实例化它。但是,在这种情况下,如果服务器出现故障,我们从缓存中提取通道工厂对象,它将引用旧的端点地址。
我在论坛上检查是否有可能更新通道工厂对象中的端点地址,如果可行的话我可以更新缓存中的通道工厂对象并从那时起使用它,我不认为这是可能的
我最近提出的唯一问题是,我们检查可能的404故障异常,这将在命中旧端点地址时发生,然后获取最新的端点地址并重新创建通道工厂,并在高速缓存中。
如果你们有任何其他想法,会有所帮助。有点卡在这一点上。
答案 0 :(得分:0)
您可以在不指定端点地址的情况下创建通道工厂,并在以后将其传递给CreateChannel方法:
public TChannel CreateChannel(EndpointAddress address)