创建第一个COM+,Enterprise Service,JITA

第一次接触这个东西,先从JustInTimeActivation的概念入手。

JITA机制适用于于对象创建代价不甚昂贵、然而其独占的资源却极其有限的应用场合。 用来提高无状态组件的使用效率。

 

我创建了以下这个程序,非常简单,环境是vs2005,framework2.0.

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.EnterpriseServices;
using System.Reflection;


namespace ComConsoleApplication
{
   
    class Program
    {
        static void Main(string[] args)
        {
            JITA jita = new JITA();
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(jita.GetCreateStamp());
                Thread.Sleep(2000);
            }
            Console.ReadLine();
        }
    }

    [JustInTimeActivation(true)]
    public class JITA : ServicedComponent
    {
        private DateTime timeStamp;

        public JITA()
        {
            timeStamp = DateTime.Now;
        }
        //class implementation

        public DateTime GetCreateStamp()
        {
            ContextUtil.DeactivateOnReturn = true;
            return timeStamp;
        }
    }
}

 

如果你直接运行的话,那就会遇到这个错误invalid servicedComponent-derived classes were found in the assembly

解决很简单,把AssemblyInfo.cs中的comvisible设为true

[assembly: ComVisible(true)]

然后你还会遇到下面这个错误does not have a strong name

很简单啦,   sn –k keyfile.snk

然后指定一下snk文件。

这个程序的效果是:如果 [JustInTimeActivation(true)],而且 ContextUtil.DeactivateOnReturn = true;
没有被注释掉,那么console里面显示的日期都是不一样的。

如果设为false,或者被注释的话ContextUtil.DeactivateOnReturn = true;,那么每次显示的时间都是一样的,都是第一次实例化的那个时间点。

Remark:

The COM+ done bit determines how long the object remains active after finishing its work and can affect the duration of a transaction. When a method call returns, COM+ inspects the done bit. If the done bit is true, COM+ deactivates the object. If the done bit is false, the object is not deactivated.

 

参考:

Expert.ASP.NET.2.0.Advanced.Application.Design

MSDN

posted @ 2009-02-13 16:38  helloworld22  阅读(541)  评论(0编辑  收藏  举报