ea43d39e263b919a063615b54defbcdf0fa0b041.svn-base 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using System;
  2. using System.IO;
  3. using System.Data;
  4. using System.Reflection;
  5. using System.Collections;
  6. using System.Runtime.Remoting;
  7. using System.Runtime.Remoting.Channels;
  8. using System.Windows.Forms;
  9. using STMes;
  10. using Core.Mes.ServerFrameWork;
  11. namespace Core.Mes.ServerManager
  12. {
  13. /// <summary>
  14. /// ClsServerMain 的摘要说明。
  15. /// </summary>
  16. public class ClsServerMain : IDisposable
  17. {
  18. public ClsServerMain(){}
  19. public void InitServerMain()
  20. {
  21. try
  22. {
  23. RemotingGate _rg = new RemotingGate();
  24. ShowLog("初始化数据库连接......");
  25. InitDBManager();
  26. ShowLog("数据库连接初始化完毕!");
  27. GetServerListDataSet();
  28. ShowLog("读取应用服务配置......");
  29. foreach(DataRow dr in this._dsServerList.Tables[0].Rows)
  30. {
  31. LoadAssemblyServer(dr["ServerName"].ToString(), dr["AssemblyName"].ToString(), dr["DBName"].ToString());
  32. }
  33. }
  34. catch(Exception ex)
  35. {
  36. ShowLog(ex.Message);
  37. }
  38. }
  39. public delegate void ShowLogDelegate(string log);
  40. public event ShowLogDelegate ShowLogEvent;
  41. private void ShowLog(string log)
  42. {
  43. if (ShowLogEvent != null)
  44. {
  45. ShowLogEvent(log);
  46. }
  47. }
  48. #region " Property "
  49. private Hashtable _dbManagerList = new Hashtable();
  50. private Hashtable DBManagerList
  51. {
  52. set {_dbManagerList = value;}
  53. get {return _dbManagerList;}
  54. }
  55. private Hashtable _htAssemblyServer = new Hashtable();
  56. private Hashtable HtAssemblyServer
  57. {
  58. set {_htAssemblyServer = value;}
  59. get {return _htAssemblyServer;}
  60. }
  61. private DataSet _dsServerList = new DataSet();
  62. #endregion
  63. private void InitDBManager()
  64. {
  65. string _strDB = Core.Mes.ServerManager.FrmSeverMain.app.GetValue("MesDB",typeof(string)).ToString();
  66. string[] strDBs = _strDB.Split('|');
  67. for(int i = 0; i < strDBs.Length; i++)
  68. {
  69. try
  70. {
  71. string str = strDBs[i];
  72. DBManagerList.Add(str , new STMes.DBManager(str, "A"));
  73. DBManagerList.Add(str+"B", new STMes.DBManager(str, "B"));
  74. DBManagerList.Add(str+"C", new STMes.DBManager(str, "C"));
  75. }
  76. catch(Exception ex)
  77. {
  78. Console.WriteLine(ex.Message);
  79. }
  80. }
  81. }
  82. //获得服务端配置信息列表
  83. private DataTable GetServerConfigInfo()
  84. {
  85. return null;
  86. }
  87. //==========================================================
  88. // 加载应用服务
  89. //==========================================================
  90. private void LoadAssemblyServer(string serverName, string assName, string dbName)
  91. {
  92. try
  93. {
  94. Assembly assembly = Assembly.Load(assName);
  95. IServerPool obj = new IServerPool();
  96. obj.DBManagerList = DBManagerList;
  97. obj.ServerName = serverName;
  98. obj.AssemblyName = assName;
  99. foreach(Type type in assembly.GetTypes())
  100. {
  101. if(type.IsClass && type.IsSubclassOf( typeof (IComponent) ) )
  102. {
  103. obj.LoadClass(type, dbName);
  104. }
  105. }
  106. //== 以服务名键值,加入本地服务列表
  107. HtAssemblyServer.Add(serverName, obj);
  108. Dispatcher myDisp = new Dispatcher(obj);
  109. RemotingServices.Marshal(myDisp, serverName);
  110. this.ShowLog("加载" + serverName + "成功!");
  111. }
  112. catch(Exception ex)
  113. {
  114. this.ShowLog("加载" + serverName + "失败!\n" + ex.Message);
  115. throw ex;
  116. }
  117. }
  118. private void GetServerListDataSet()
  119. {
  120. if (!File.Exists("MesServer.xml"))
  121. {
  122. throw new Exception("未找到服务配置文件!");
  123. }
  124. _dsServerList.ReadXml("MesServer.xml");
  125. if (_dsServerList == null || _dsServerList.Tables.Count ==0)
  126. throw new Exception("配置文件设置错误!");
  127. _dsServerList.AcceptChanges();
  128. }
  129. #region IDisposable 成员
  130. public void Dispose()
  131. {
  132. if (this.DBManagerList != null)
  133. {
  134. IEnumerator ie = this.DBManagerList.GetEnumerator();
  135. while(ie.MoveNext())
  136. {
  137. try
  138. {
  139. System.Collections.DictionaryEntry id = (System.Collections.DictionaryEntry)ie.Current;
  140. STMes.DBManager myDbManager = (STMes.DBManager)id.Value;
  141. myDbManager.Dispose();
  142. myDbManager = null;
  143. }
  144. catch {}
  145. }
  146. this.DBManagerList.Clear();
  147. }
  148. if (STMes.DBManager._dbProxy != null)
  149. {
  150. try
  151. {
  152. STMes.DBManager._dbProxy.Dispose();
  153. }
  154. catch{}
  155. }
  156. }
  157. #endregion
  158. }
  159. }