首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

WCF升级DLL的有关问题,求各路大神指教

2012-12-15 
WCF升级DLL的问题,求各路大神指教!最近利用WCF+Winform做了一个项目,到目前为止感觉WCF还是挺不错的,但感

WCF升级DLL的问题,求各路大神指教!
最近利用WCF+Winform做了一个项目,到目前为止感觉WCF还是挺不错的,但感觉要升级或者维护WCF的时候就比较麻烦了,因为就项目的需求来说需要经常性的添加功能和修改一些程序上的BUG,所以Server端频繁的替换更新DLL文件是在所难免了,但又不能停Server来更新文件DLL文件,刚开始的时候我尝试直接对Server端的DLL文件进行替换,但这样系统会提示DLL文件正在使用中,无法进行替换,后来我看了网上的一个办法,程序启动时将用到的DLL文件读到内存,然后程序再从内存里面去加载DLL文件,这样硬盘上的DLL文件就可以被替换了,刚开始我为之大喜,但新的问题又出现了,虽说现在已经可以动态的替换DLL的文件了,但是我替换了DLL文件之后才发现Server仍然是用旧的DLL的算法。
Server端的宿主是Windows服务,WCF的绑定方式是NetTcpBing,以下是Server和Client的部分代码

Servere端开启代码:
            Assembly asm = null;
            byte[] addinStream = null;

            //把DLL读取到内存
            FileStream FStream = new FileStream(Application.StartupPath + @"\MacauIT_DAL.dll", FileMode.Open, FileAccess.Read);
            BinaryReader Breader = new BinaryReader(FStream);
            addinStream = Breader.ReadBytes((int)FStream.Length);
            FStream.Close();
            FStream.Dispose();
            Breader.Close();
            Breader.Dispose();

            //加载内存中的Dll
            asm = Assembly.Load(addinStream); 

            Type type = asm.GetType("MacauIT.DAL.MacauIT_Services");

            Uri baseMacauITAddress = new Uri("net.tcp://localhost:8731");
            MacauITServiceHost = new ServiceHost(type, baseMacauITAddress);
            MacauITServiceHost.Open();
Client端引用代码:
            public static MacauIT_Services MIT_Services = new MacauIT_Services();//客户端使用的是全局公共的静态实例连接
            string str =  CommonClass.MIT_Services.GetStr_GetHello()  //Server和Client使用的是代理方法

请问Server的DLL替换了之后,客户端调用时怎样才调用到新的DLL里面的算法,而不是旧的DLL算法呢?可不可以在新的DLL替换之后重新更新Server而又不关闭连接呢?

不知道大家平时是如何解决WCF升级DLL这个问题的,求各路大神指教!谢谢!
[最优解释]
NLB做集群吧。。。
[其他解释]
没有人顶么,自己顶起。。。

热点排行