第2章 对象激活上下文-对象激活

对象激活主要包括

  • 构造字符串
  • 及时激活
  • 对象池
  • 私有组件

     

1.构造字符串

服务器苏建只能使用默认的构造函数,这样在对象创建的时候你就不能通过构造函数初始化数据.但是你可以使用构造字符串实现类似的功能,只是每次实例化的时候都只能使用相同的构造字符串.系统管理员可以改变构造字符串.(比如用到配置数据库的连接字符串).

通过[ConstructionEnabled]特性和其Default属性把默认的构造字符串添加到配置元数据中.在类内部你必须重写基类SericedComponent的Construct方法.当每次创建对象时,这种方法会被COM+基础结构调用.

2.即时激活(Just-in-Time Activation JITA)

JITA是一个用于减少服务器负载的特性.对于打开lJITA支持的组件,他的生命周期和他使用的客户端应用程序无关.这个服务器组件自己通过设置完成位来决定对象什么时候应该被终止.如果客户应用程序通过客户端的同一个引用来调用一个对象的方法,而这个对象在服务器端已经被终止的话,一个新的对象会被自动创建并激活.

JITA是通过设置[JustInTimeActiveation]来启用的.

要使用JITA,必须重写两个基类ServicedComponent的方法:Activate和Deactive.当对象生成后Activate方法会被运行时自动调用.当对象终止前Deactive方法会被自动调用.

为组件设置完成的两种方法:

  • [AutoComplate]
  • 设置ContextUtil的静态属性DeactivateOnReturn为True.
3.对象池

对象池对于那种初始化过程很长的对象(比如,连接到一个老系统的服务器,或创建一个复杂的矩阵以进行数学运算)是个有用的服务.如果调用方法所需要的时间少于创建所需要的时间,应该考虑对象池技术.

对象的初始化过程在客户端第一次使用它之前进行:在应用程序启动后,为对象池设定的最小的对象就会被创建和初始化.

4.私有组件

私有组件是COM+1.5带来的新特性之一.被标记为[PrivateComplent]特性的组件只能由应用程序内部的对象激活,客户端应用程序不行.

  1第2章 对象激活上下文-对象激活using System;
  2第2章 对象激活上下文-对象激活using System.EnterpriseServices;
  3第2章 对象激活上下文-对象激活using System.Xml;
  4第2章 对象激活上下文-对象激活using System.Globalization;
  5第2章 对象激活上下文-对象激活using System.IO;
  6第2章 对象激活上下文-对象激活
  7第2章 对象激活上下文-对象激活
  8第2章 对象激活上下文-对象激活namespace Demo.Introduction
  9第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活{
 10第2章 对象激活上下文-对象激活    [ObjectPooling(true,100,1000)]
 11第2章 对象激活上下文-对象激活    [JustInTimeActivation]
 12第2章 对象激活上下文-对象激活    [ConstructionEnabled(Default = @"C:\Temp\")]
 13第2章 对象激活上下文-对象激活    [EventTrackingEnabled]
 14第2章 对象激活上下文-对象激活    public class CoursesComponent : ServicedComponent, ICourseOrder
 15第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活    第2章 对象激活上下文-对象激活{
 16第2章 对象激活上下文-对象激活        private string path;
 17第2章 对象激活上下文-对象激活
 18第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        public CoursesComponent() 第2章 对象激活上下文-对象激活{ }
 19第2章 对象激活上下文-对象激活
 20第2章 对象激活上下文-对象激活        protected override void Construct(string s)
 21第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 22第2章 对象激活上下文-对象激活            path = s;
 23第2章 对象激活上下文-对象激活        }

 24第2章 对象激活上下文-对象激活
 25第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        ICourseOrder 成员#region ICourseOrder 成员
 26第2章 对象激活上下文-对象激活        [AutoComplete]
 27第2章 对象激活上下文-对象激活        public void Order(string xmlOrder)
 28第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 29第2章 对象激活上下文-对象激活            CreateFile();
 30第2章 对象激活上下文-对象激活            XmlDocument doc = new XmlDocument();
 31第2章 对象激活上下文-对象激活            doc.LoadXml(xmlOrder);
 32第2章 对象激活上下文-对象激活            XmlNodeList courses = doc.GetElementsByTagName("Course");
 33第2章 对象激活上下文-对象激活            foreach (XmlNode nodeCourse in courses)
 34第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活            第2章 对象激活上下文-对象激活{
 35第2章 对象激活上下文-对象激活                XmlElement xmlCourse = nodeCourse as XmlElement;
 36第2章 对象激活上下文-对象激活                if (xmlCourse != null)
 37第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活                第2章 对象激活上下文-对象激活{
 38第2章 对象激活上下文-对象激活                    string courseNumber = xmlCourse.GetAttribute("Number");
 39第2章 对象激活上下文-对象激活                    string title = GetText(xmlCourse, "Title")[0];
 40第2章 对象激活上下文-对象激活                    DateTime date = DateTime.Parse(GetText(xmlCourse, "StartDate")[0]);
 41第2章 对象激活上下文-对象激活                    string[] attendees = GetText(xmlCourse, "Attendee");
 42第2章 对象激活上下文-对象激活                    for (int i = 0; i < attendees.Length; i++)
 43第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活                    第2章 对象激活上下文-对象激活{
 44第2章 对象激活上下文-对象激活                        WritToFile(courseNumber, title, date, attendees[i]);
 45第2章 对象激活上下文-对象激活                    }

 46第2章 对象激活上下文-对象激活                }

 47第2章 对象激活上下文-对象激活            }

 48第2章 对象激活上下文-对象激活            CloseFile();
 49第2章 对象激活上下文-对象激活        }

 50第2章 对象激活上下文-对象激活
 51第2章 对象激活上下文-对象激活        #endregion

 52第2章 对象激活上下文-对象激活
 53第2章 对象激活上下文-对象激活        private StreamWriter writer = null;
 54第2章 对象激活上下文-对象激活
 55第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        /**//// <summary>
 56第2章 对象激活上下文-对象激活        /// Create and opens aunique file
 57第2章 对象激活上下文-对象激活        /// </summary>

 58第2章 对象激活上下文-对象激活        private void CreateFile()
 59第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 60第2章 对象激活上下文-对象激活            string uniqueName = Guid.NewGuid().ToString();
 61第2章 对象激活上下文-对象激活            writer = new StreamWriter(path + uniqueName + ".txt");
 62第2章 对象激活上下文-对象激活        }

 63第2章 对象激活上下文-对象激活
 64第2章 对象激活上下文-对象激活        private void CloseFile()
 65第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 66第2章 对象激活上下文-对象激活            writer.Close();
 67第2章 对象激活上下文-对象激活        }

 68第2章 对象激活上下文-对象激活
 69第2章 对象激活上下文-对象激活        protected override void Activate()
 70第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 71第2章 对象激活上下文-对象激活            CreateFile();
 72第2章 对象激活上下文-对象激活        }

 73第2章 对象激活上下文-对象激活
 74第2章 对象激活上下文-对象激活        protected override void Deactivate()
 75第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 76第2章 对象激活上下文-对象激活            CloseFile();
 77第2章 对象激活上下文-对象激活        }

 78第2章 对象激活上下文-对象激活
 79第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        /**//// <summary>
 80第2章 对象激活上下文-对象激活        /// Write course information to the comma-separated file
 81第2章 对象激活上下文-对象激活        /// </summary>
 82第2章 对象激活上下文-对象激活        /// <param name="courseNumber"></param>
 83第2章 对象激活上下文-对象激活        /// <param name="title"></param>
 84第2章 对象激活上下文-对象激活        /// <param name="startDate"></param>
 85第2章 对象激活上下文-对象激活        /// <param name="attendee"></param>

 86第2章 对象激活上下文-对象激活        private void WritToFile(string courseNumber, string title, DateTime startDate, string attendee)
 87第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
 88第2章 对象激活上下文-对象激活            writer.WriteLine("{0};{1};{2};{3}", courseNumber, title, startDate.ToString("d", CultureInfo.InstalledUICulture), attendee);
 89第2章 对象激活上下文-对象激活        }

 90第2章 对象激活上下文-对象激活
 91第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        /**//// <summary>
 92第2章 对象激活上下文-对象激活        /// parses the xml data of a single course for the xml element
 93第2章 对象激活上下文-对象激活        /// tagName to return the inner text elements
 94第2章 对象激活上下文-对象激活        /// </summary>
 95第2章 对象激活上下文-对象激活        /// <param name="xmlCourse"></param>
 96第2章 对象激活上下文-对象激活        /// <param name="tagName"></param>
 97第2章 对象激活上下文-对象激活        /// <returns></returns>

 98第2章 对象激活上下文-对象激活        private string[] GetText(XmlElement xmlCourse, string tagName)
 99第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活        第2章 对象激活上下文-对象激活{
100第2章 对象激活上下文-对象激活            string[] text = null;
101第2章 对象激活上下文-对象激活            XmlNodeList nodeList = xmlCourse.GetElementsByTagName(tagName);
102第2章 对象激活上下文-对象激活            if (nodeList.Count < 1)
103第2章 对象激活上下文-对象激活                throw new Exception("No elements of type <" + tagName + "> available");
104第2章 对象激活上下文-对象激活            //CourseException("No elements of type <" + tagName + "> available");
105第2章 对象激活上下文-对象激活            text = new string[nodeList.Count];
106第2章 对象激活上下文-对象激活            for (int i = 0; i < nodeList.Count; i++)
107第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活            第2章 对象激活上下文-对象激活{
108第2章 对象激活上下文-对象激活                XmlElement element = nodeList[i] as XmlElement;
109第2章 对象激活上下文-对象激活                if (element != null)
110第2章 对象激活上下文-对象激活第2章 对象激活上下文-对象激活                第2章 对象激活上下文-对象激活{
111第2章 对象激活上下文-对象激活                    text[i] = element.InnerText;
112第2章 对象激活上下文-对象激活                }

113第2章 对象激活上下文-对象激活            }

114第2章 对象激活上下文-对象激活            return text;
115第2章 对象激活上下文-对象激活        }

116第2章 对象激活上下文-对象激活    }

117第2章 对象激活上下文-对象激活}

118第2章 对象激活上下文-对象激活
上一篇:VS2015 Enterprise 安装之惊险及收获


下一篇:使用.net反射机制实现 “热”更新动态库(dll文件)