我有以下问题:是否有可能.NET程序集将被重新定位为,包括和Regasm以及Regsvcs?谢谢
发布于 2012-03-08 19:39:35
这是对这个问题的一个超时回答.但让我解释一下我所知道的不同之处。
为了理解这一点,您必须想到COM和COM+应用程序之间的区别。
每次代码试图初始化对象时,都会根据需要将类型注册为COM -创建对象。
将您的类型注册为COM+应用程序- -创建对象、支持对象池、支持事务、支持增强的安全性等等。
为了理解池,我借用了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的工作方式)。
tlbexp.exe)
regsvcs -从.Net程序集创建COM+应用程序。这意味着regsvcs选择公开公开的.Net程序集类型,并且除了编写适当的注册表项之外,它还创建一个可以通过Componet控制台(%systemroot%\system32\comexp.msc)管理的COM+应用程序。
提供的信息创建COM+应用程序。
如果您用ComVisible(true) ->编写一个ComVisible(真)->类的公共类型(Foo),那么就可以为COM注册了。
// Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class Foo{....}如果您用(真)编写了一个C#类,从System.EnterpriseServices.ServicedComponent继承(当然还有更多的设置)->这个类(FooBar)可以注册为COM+应用程序。
// Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class FooBar: System.EnterpriseServices.ServicedComponent{.....}从COM+创建.Net应用程序--您可以从这里开始。记住,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-Objects-using-EnterpriseServices-in-N
https://stackoverflow.com/questions/8056517
复制相似问题