gpt4 book ai didi

performance - ASP.NET 客户端应用程序中的 WCF ChannelFactory 和 Channel 缓存

转载 作者:行者123 更新时间:2023-12-04 14:21:01 25 4
gpt4 key购买 nike

我正在构建一系列将被多个应用程序使用的 WCF 服务。因此,我正在尝试定义一个通用库来访问 WCF 服务。

知道不同用户发出的每个服务请求都应该使用不同的 channel ,我正在考虑缓存每个请求的 channel ( HttpContext.Current.Items )并缓存用于创建每个应用程序 channel 的 ChannelFactory( HttpApplication.Items ),因为我可以创建多个 channel 具有相同的ChannelFactory .

但是,在关闭 ChannelFactory 和 Channel 时,我对这种缓存机制有疑问。

  • 我是否需要在使用 channel 后、请求结束时关闭 channel ,或者当该请求的上下文消失时是否可以将其关闭(?)?
  • channel 工厂呢?由于每个 channel 都与创建它的 ChannelFactory 相关联,因此在应用程序进程(AppDomain)的生命周期中保持相同的 ChannelFactory 是否安全?

  • 这是我用来管理这个的代码:
    public class ServiceFactory
    {
    private static Dictionary<string, object> ListOfOpenedChannels
    {
    get
    {
    if (null == HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"])
    {
    HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"] = new Dictionary<string, object>();
    }

    return (Dictionary<string, object>)HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"];
    }
    set
    {
    HttpContext.Current.Items[HttpContext.Current.Session.SessionID + "_ListOfOpenedChannels"] = value;
    }
    }

    public static T CreateServiceChannel<T>()
    {
    string key = typeof(T).Name;

    if (ListOfOpenedChannels.ContainsKey(key))
    {
    return (T)ListOfOpenedChannels[key];
    }
    else
    {
    ChannelFactory<T> channelF = new ChannelFactory<T>("IUsuarioService");
    T channel = channelF.CreateChannel();
    ListOfOpenedChannels.Add(key, channel);
    return channel;
    }
    }
    }

    谢谢!

    最佳答案

    理想情况下,一旦你完成它就关闭 channel 。这会将其放回 channel 池中,以便其他工作线程可以使用它。

    是的, channel 工厂(昂贵的位)可以在应用程序的整个生命周期内保留。

    更新

    从 .Net 4.5 开始,工厂有一个内置的缓存选项
    ChannelFactory Caching .NET 4.5

    关于performance - ASP.NET 客户端应用程序中的 WCF ChannelFactory 和 Channel 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1825990/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com