zoukankan      html  css  js  c++  java
  • 动态添加删除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了,未关闭的又可以被客户端继续访问。。。。。。。。

     
     
  • 相关阅读:
    如何开始学习编程? 这 3 步很重要
    php正则表达式验证手机/固定电话/邮箱/身份证/银行卡自定义函数
    【经验分享】-PHP程序员的技能图谱
    PHP程序员的技能图谱
    PHP程序员要掌握的技能
    冒泡排序
    文件下载方法
    加密,解密方法
    获取真实IP
    二维数组根据某个字段排序
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2554115.html
Copyright © 2011-2022 走看看