gma*_*n23 22
这是该问题的超时响应.但让我解释一下我所知道的差异.
为了理解这一点,你必须想出COM和COM +应用程序之间的差异.
将类型注册为COM -每次代码尝试初始化对象时,按需创建对象
将您的类型注册为COM +应用程序 -创建对象,支持对象池,支持事务,支持增强的Windows安全性等.
为了理解汇总,我借用了http://www.tek-tips.com/viewthread.cfm?qid=116249的回复
COM +增加可伸缩性和性能的主要方法是通过对象池完成的.不幸的是,这需要一个自由线程组件,这是VB6无法做到的.但是...... .NET(任何语言)和C++都可以.
对象池的作用是告诉MTS/COM +创建一个可用对象池,从COM +启动时创建的最小值到最大值(我不知道它是否是硬盘最大值,或者它是否灵活).池为您做的是为调用者提供预先初始化的对象.这比等待创建对象(特别是通过网络)快得多.调用者连接到对象,进行方法调用和断开连接.然后该对象返回池中.
它确实需要对程序架构进行根本性的改变.在COM +之前,每个人都会打开与数据库的连接,并在应用程序期间保持打开状态.当用户数量<100时,这是可以的,因为服务器上的负载是可管理的(每个连接占用RAM).但对于大量人群或未知数量的用户(例如来自Internet的用户),数据库服务器会快速过载.有人意识到每个交易用户实际上只在一小部分时间内完成了实际工作 - 其余的时间他们都是空闲的.
因此,您的程序必须建立连接,发出请求,获取结果,然后断开连接(这也适用于非数据库对象).这也意味着应用程序是无状态的(在请求之间不维护程序状态).因为......您当前使用的对象在200毫秒之前属于其他人.当您使用该对象时,另一个用户将在您之后使用它.因此,对象无法保留任何信息 - 它们必须只是代码.
regasm - 将.net程序集类型注册为COM.这意味着regasm挑选了.Net程序集的公开暴露类型,然后在HKCR编写适当的注册表项.... (这是regsvr32的工作方式).
regsvcs - 从.Net程序集创建COM +应用程序.这意味着regsvcs会选择公开的.Net程序集类型,除了编写相应的注册表项之外,它还会创建一个COM +应用程序,您可以通过Componet Services Manager控制台管理它(%systemroot%\ system32\comexp.msc ).
regsvcs根据从命令行传递给它的信息或基于.Net dll中可用的信息创建COM +应用程序.
regsvcs允许您将COM +类型合并到现有的COM +应用程序.看看comexp.msc遍历以了解COM +应用程序以及COM +管理的COmponets.
如果你用ComVisible编写一个C#类(true) - >这个类的公共类型(Foo)已准备好注册COM的regasm.
// Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class Foo{....}
Run Code Online (Sandbox Code Playgroud)
如果你编写一个带有ComVisible(true)的C#类,继承自System.EnterpriseServices.ServicedComponent(当然还有更多设置..) - >这个类(FooBar)已准备好注册为COM +应用程序.
// Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class FooBar: System.EnterpriseServices.ServicedComponent{.....}
Run Code Online (Sandbox Code Playgroud)
从.Net创建COM +应用程序 - 您可以从这里开始.记住COM +为COM公开的对象提供高级的交易管理.
http://support.microsoft.com/kb/306296 http://my.execpc.com/~gopalan/dotnet/complus/complus.net_accountmanager.html http://www.codeproject.com/Articles/3845/Creating -COM-对象-使用-企业服务-在-N