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

  • 相关阅读:
    Common Git command and mean (Windows)
    The method of using code coverage tool
    Auto login to your computer
    Clear all username or password for login.
    Python: how to public a model
    VS中,NUnit适合测试者尽心开发自动化测试,而Unit适合开发者开发单元测试。
    Use eplipse to develop Python project
    Prepare Python environment and install selenium.
    python 通过命令传参方式执行对应方法
    使用cat 命令生成自定义内容文件
  • 原文地址:https://www.cnblogs.com/weivyuan/p/2553760.html
Copyright © 2020-2023  润新知