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做集群吧。。。
[其他解释]
没有人顶么,自己顶起。。。