小编Mor*_*hed的帖子

WCF通道工厂缓存

WCF服务将使用另一个Wcf服务.现在,我想创建通道工厂对象并手动缓存它.我知道表现会很好,但会引起任何其他问题的关注.

我发现信息如下:

"使用ChannelFactory,您仍然可以使用自己的自定义MRU缓存实现通道工厂缓存.这仍然意味着一个重要的限制:对共享通道工厂的同一服务端点的调用也必须共享相同的凭据.这意味着您无法传递不同的凭据对于从Web服务器层调用应用程序服务的每个线程.如果您使用相同的证书或Windows凭据对下游服务进行身份验证,则会出现这种情况.在这种情况下,如果您需要传递有关经过身份验证的用户的信息,您可以使用自定义标头而不是安全令牌."

链接:http://devproconnections.com/net-framework/wcf-proxies-cache-or-not-cache

我在Google中找到了一个示例代码,如下所示.

internal delegate void UseServiceDelegate<in T>(T proxy);



    internal static class Service<T>
   {

      private static readonly IDictionary<Type, string>  
                 cachedEndpointNames   =    new  Dictionary<Type, string>();


private static readonly IDictionary<string, ChannelFactory<T>> 
    cachedFactories =
    new Dictionary<string, ChannelFactory<T>>();


     internal static void Use(UseServiceDelegate<T> codeBlock)
     {
        var factory = GetChannelFactory();
        var proxy = (IClientChannel)factory.CreateChannel();
        var success = false;

      try
      {
        using (proxy)
        {
            codeBlock((T)proxy);
        }

        success = true;
    }
    finally
    {
        if (!success)
        {
            proxy.Abort();
        }
    }
}


     private static ChannelFactory<T> …
Run Code Online (Sandbox Code Playgroud)

c# wcf

1
推荐指数
1
解决办法
3055
查看次数

标签 统计

c# ×1

wcf ×1