動態添加刪除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了,未關閉的又可以被客戶端繼續訪問。。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM