程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了创建WCF ChannelFactory大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决创建WCF ChannelFactory?

开发过程中遇到创建WCF ChannelFactory的问题如何解决?下面主要结合日常开发的经验,给出你关于创建WCF ChannelFactory的解决方法建议,希望对你解决创建WCF ChannelFactory有所启发或帮助;

是的,如果您要创建类似这样的东西(一个静态类来容纳所有这些ChannelFactory<T>实例),则必须确保该类是100%线程安全的,并且在并发访问时不会出错。我还没有使用过.NET 4的功能,因此我无法对这些功能进行具体评论-但我绝对建议您尽可能确保此功能的安全。

至于您的第二个(次要)问题:ChannelFactory本身是一个静态类- 因此您不能真正.Close()在其上调用方法。如果您想问是否.Close()在实际的上调用此方法IChannel,请再次:是的,请尽力成为一个好公民,并尽可能关闭这些渠道。如果您错过了一个,.NET将为您提供服务- 但不要只是在地板上扔掉您未使用的频道然后继续-自己清理一下!:-)

解决方法

我正在尝试将现有的.NET Remoting应用程序转换为WCF。服务器和客户端都共享公共接口,并且所有对象都是服务器激活的对象。

在WCF世界中,这类似于创建按呼叫服务并ChannelFactory<T>用于创建代理。我正在为如何ChannelFactory<T>为ASP.NET客户端正确创建而苦苦挣扎。

出于性能原因,ChannelFactory<T>每次调用服务时,我都想缓存对象并仅创建频道。在.NET远程处理时代,曾经有RemotingConfiguration.GetRegisteredWellknownClientTypes()一种方法可以获取我可以缓存的客户端对象的集合。看起来,在WCF世界中没有这样的东西,尽管我能够从配置文件中获得端点的集合。

现在,我认为这将起作用。我可以创建这样的东西:

public static ProxyHelper
{
    static Dictionary<Type,object> lookup = new Dictionary<string,object>();

    static public T GetChannel<T>()
    {
        Type type = typeof(T);
        ChannelFactory<T> factory;

        if (!lookup.ContainsKey(type))
        {
            factory = new ChannelFactory<T>();
            lookup.Add(type,factory);
        }
        else
        {
            factory = (ChannelFactory<T>)lookup[type];
        }

        T proxy = factory.CreateChannel();   
        ((IClientChannel)proxy).Open();

        return proxy;
    }    
}

我认为上面的代码可以工作,但是我有点担心多个线程试图添加新ChannelFactory<T>对象(如果不在查找中)。由于使用的是.NET
4.0,因此我在考虑使用ConcurrentDictionary和使用GetOrAdd()方法,或者先使用use
TryGetValue()方法来检查是否ChannelFactory<T>存在,然后再使用GetOrAdd()method。虽然不确定性能ConcurrentDictionary.TryGetValue()ConcurrentDictionary.GetOrAdd()方法。

另一个小问题是,是否需要ChannelFactory.Close()在ASP.NET应用程序结束后在通道工厂对象上调用方法,还是可以让.NET框架自行处理通道工厂对象?使用((IChannel)proxy).Close()方法调用服务方法后,代理通道将始终关闭。

大佬总结

以上是大佬教程为你收集整理的创建WCF ChannelFactory全部内容,希望文章能够帮你解决创建WCF ChannelFactory所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: