【问题标题】:WCF/Silverlight: Why use a ChannelFactory instead of a Client?WCF/Silverlight:为什么使用 ChannelFactory 而不是客户端?
【发布时间】:2011-02-03 16:40:03
【问题描述】:

继承了一个使用 ChannelFactory 而不是客户端进行 WCF 调用的项目。你为什么要这么做?

另外,缓存 ChannelFactory.CreateChannel() 调用的结果是否安全,还是应该每次都创建一个新的?

【问题讨论】:

    标签: silverlight wcf


    【解决方案1】:

    创建 WCF 客户端分为两步:

    • 创建通道工厂
    • 使用该通道工厂,创建实际通道

    第 1 步在处理能力和速度方面相当昂贵 - 因此,如果您可以创建通道工厂,然后缓存在某处,您可以节省一些资源并在缓存的通道工厂之外创建一个通道会更快而不是一直重新创建整个客户端。

    因此,在此设置中,如果可以的话,我会尝试缓存 ChannelFactory - 并在每次需要时从该工厂重新创建通道。

    【讨论】:

    • 但是他们为什么要缓存频道本身呢?这样做有什么危险吗?
    • @Jonathan Allen:好吧,如果你可以缓存和重用一个频道,那么你不需要做这两个步骤中的任何一个 - 至少只要频道不会绊倒“故障”模式(发生异常时)。危险在于,您几乎必须在每次使用之前检查缓存的 Channel 是否处于故障状态 - 如果是,则需要重新创建它。
    • 有没有办法让我明确地导致它出错?我想向我的同事证明这一点。
    • @Jonathan Allen:当然 - 有很多方法:指定一个无效的服务地址,或者有一个非常短的 sendTimeout (00:00:01),或者调用一个抛出 .NET 异常的服务方法(NotImplementedException 什么的)
    • 我不太确定这是真的。我总是得到期望和超时,但它似乎并没有破坏频道。
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多