WCF代理缓存+运行时端点修改



在我目前工作的项目中,我们有30多个wcf服务,这些服务在我们的web应用程序中被大量调用,我们遇到了性能问题,其中一个解决方案是缓存代理。因此,我们所做的是创建一个字典对象,并使用端点名称作为关键字,缓存通道工厂对象,以便后续调用将从缓存中提取,而不是在每次调用时重新实例化通道工厂对象。在其他论坛上有许多实现。

但我们遇到了一个问题,我们的系统设置方式是,我们的服务位于一个或多个服务器上,其中任何时候只有一个服务器处于活动状态,如果一个服务器出现故障,则另一个服务器被用作故障保障器。在将通道工厂放入缓存之前创建通道工厂时,我们可以获取给定服务的最新端点地址,然后对其进行实例化。然而,在这种情况下,如果服务器出现故障,我们从缓存中提取通道工厂对象,它将指代旧的端点地址。

我在论坛上检查是否有可能更新通道工厂对象中的端点地址,如果这是可行的,我可以更新缓存中的通道工厂对象,然后使用它,我认为这是不可能的。

我最近想到的唯一一件事是,我们检查一个可能的404故障异常,当一个旧的端点地址被击中时,会发生这种异常,然后获得最新的端点地址,重新创建通道工厂,并在缓存中更新它。

如果你们还有其他想法,会很有帮助的。在这一点上有点卡住了。

您可以在不指定端点地址的情况下创建通道工厂,然后将其传递给方法CreateChannel:

public TChannel CreateChannel(EndpointAddress address)

最新更新