动态添加删除WCF服务类包
动态添加删除WCF服务类包
最近公司需要开发一个新项目,是WCF+WPF,服务器有2台,一台数据库服务器MSSQL,一台是用来跑WCF服务程序,客户端程序使用WPF开发winform程序
因为本项目将来会经常性的修改WCF程序,比如BUG或新增增删改功能(大家一样),但是又不能关闭当前正在使用的WCF服务。。。
我的解决方案是 使用一个宿主程序来控制一个WCF路由和动态加载/卸载N个WCF服务。
先来看看宿主界面,如下图:
宿主程序只包含一个WCF程序,该程序是用来公布后续被加载的WCF的URI地址,当然这个宿主程序的URI一般不会被变更,该服务必须一直开着,上图路由模块就是主入WCF服务的URI。
下图是加载WCF的DLL的效果图
-----------------------难看的分割线---------------------
下面贴主要部分的代码:
Assembly MyAssembly = Assembly.LoadFrom("刚才加载的DLL地址");
Type[] type = MyAssembly.GetTypes();
List<Type> liSe = new List<Type>();
//寻找服务接口
foreach (Type t in type)
{
if (t.IsClass)
{
foreach (Type item in t.GetInterfaces())
{
foreach (Object obj in item.GetCustomAttributes(true))
{
if (obj.ToString().Trim().ToUpper() == "System.ServiceModel.ServiceContractAttribute".ToUpper())
{
liSe.Add(t);
liSe.Add(item);
}
}
}
}
}
Uri baseAddress = new Uri("Uri地址,可以从文本框地址,注意格式验证");
ServiceHost sh2 = new ServiceHost(liSe[0], baseAddress);//class
sh2.AddServiceEndpoint(liSe[1], new WSHttpBinding(), liSe[0].Name);//interface
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
sh2.Description.Behaviors.Add(smb);
sh2.Open();
------------------------难看的分割线---------------------------
上面的查找服务类不是很好,肯定有更好的方法,刚接触WCF。各位大神有方法一定要告诉我哦
通过上面的 我就可以动态加载WCF的DLL了,未关闭的又可以被客户端继续访问。。。。。。。。
标签: 动态加载WCF服务 , 动态加载WCF服务DLL
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息