using System; using System.IO; using System.Data; using System.Reflection; using System.Collections; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Windows.Forms; using STMes; using Core.Mes.ServerFrameWork; namespace Core.Mes.ServerManager { /// /// ClsServerMain 的摘要说明。 /// public class ClsServerMain : IDisposable { public ClsServerMain(){} public void InitServerMain() { try { RemotingGate _rg = new RemotingGate(); ShowLog("初始化数据库连接......"); InitDBManager(); ShowLog("数据库连接初始化完毕!"); GetServerListDataSet(); ShowLog("读取应用服务配置......"); foreach(DataRow dr in this._dsServerList.Tables[0].Rows) { LoadAssemblyServer(dr["ServerName"].ToString(), dr["AssemblyName"].ToString(), dr["DBName"].ToString()); } } catch(Exception ex) { ShowLog(ex.Message); } } public delegate void ShowLogDelegate(string log); public event ShowLogDelegate ShowLogEvent; private void ShowLog(string log) { if (ShowLogEvent != null) { ShowLogEvent(log); } } #region " Property " private Hashtable _dbManagerList = new Hashtable(); private Hashtable DBManagerList { set {_dbManagerList = value;} get {return _dbManagerList;} } private Hashtable _htAssemblyServer = new Hashtable(); private Hashtable HtAssemblyServer { set {_htAssemblyServer = value;} get {return _htAssemblyServer;} } private DataSet _dsServerList = new DataSet(); #endregion private void InitDBManager() { string _strDB = Core.Mes.ServerManager.FrmSeverMain.app.GetValue("MesDB",typeof(string)).ToString(); string[] strDBs = _strDB.Split('|'); for(int i = 0; i < strDBs.Length; i++) { try { string str = strDBs[i]; DBManagerList.Add(str , new STMes.DBManager(str, "A")); DBManagerList.Add(str+"B", new STMes.DBManager(str, "B")); DBManagerList.Add(str+"C", new STMes.DBManager(str, "C")); } catch(Exception ex) { Console.WriteLine(ex.Message); } } } //获得服务端配置信息列表 private DataTable GetServerConfigInfo() { return null; } //========================================================== // 加载应用服务 //========================================================== private void LoadAssemblyServer(string serverName, string assName, string dbName) { try { Assembly assembly = Assembly.Load(assName); IServerPool obj = new IServerPool(); obj.DBManagerList = DBManagerList; obj.ServerName = serverName; obj.AssemblyName = assName; foreach(Type type in assembly.GetTypes()) { if(type.IsClass && type.IsSubclassOf( typeof (IComponent) ) ) { obj.LoadClass(type, dbName); } } //== 以服务名键值,加入本地服务列表 HtAssemblyServer.Add(serverName, obj); Dispatcher myDisp = new Dispatcher(obj); RemotingServices.Marshal(myDisp, serverName); this.ShowLog("加载" + serverName + "成功!"); } catch(Exception ex) { this.ShowLog("加载" + serverName + "失败!\n" + ex.Message); throw ex; } } private void GetServerListDataSet() { if (!File.Exists("MesServer.xml")) { throw new Exception("未找到服务配置文件!"); } _dsServerList.ReadXml("MesServer.xml"); if (_dsServerList == null || _dsServerList.Tables.Count ==0) throw new Exception("配置文件设置错误!"); _dsServerList.AcceptChanges(); } #region IDisposable 成员 public void Dispose() { if (this.DBManagerList != null) { IEnumerator ie = this.DBManagerList.GetEnumerator(); while(ie.MoveNext()) { try { System.Collections.DictionaryEntry id = (System.Collections.DictionaryEntry)ie.Current; STMes.DBManager myDbManager = (STMes.DBManager)id.Value; myDbManager.Dispose(); myDbManager = null; } catch {} } this.DBManagerList.Clear(); } if (STMes.DBManager._dbProxy != null) { try { STMes.DBManager._dbProxy.Dispose(); } catch{} } } #endregion } }