首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注册与注册

注册与注册
EN

Stack Overflow用户
提问于 2011-11-08 20:13:18
回答 1查看 7.8K关注 0票数 14

我有以下问题:是否有可能.NET程序集将被重新定位为,包括和Regasm以及Regsvcs?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)

  • regasm可以为您生成一个tlb文件(就像tlbexp.exe)

  • regasm可以对您的.Net程序集进行编码一样)。也就是说,如果在GAC中没有.Net程序集,那么可以将COM代码压缩到.Net程序集存在的文件位置。从这里,COM Marshaller将选择使用CLR执行程序集。

  • regasm允许您通过双击创建一个.reg文件,您可以在其中更新注册表项。您必须确保GAC程序集安装到GAC,因为.Net /regfile开关不允许您使用/codebase (如果它安装了代码库,那么它就是/codebase)。

regsvcs -从.Net程序集创建COM+应用程序。这意味着regsvcs选择公开公开的.Net程序集类型,并且除了编写适当的注册表项之外,它还创建一个可以通过Componet控制台(%systemroot%\system32\comexp.msc)管理的COM+应用程序。

  • regsvcs基于从命令行传递给它的信息或基于.Net dll.

提供的信息创建COM+应用程序。

  • regsvcs允许您将COM+类型合并到现有的COM+应用程序。请看一看comexp.msc来遍历以了解COM+应用程序和COM+管理的COmponets。

如果您用ComVisible(true) ->编写一个ComVisible(真)->类的公共类型(Foo),那么就可以为COM注册了。

代码语言:javascript
复制
    // Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class Foo{....}

如果您用(真)编写了一个C#类,从System.EnterpriseServices.ServicedComponent继承(当然还有更多的设置)->这个类(FooBar)可以注册为COM+应用程序。

代码语言:javascript
复制
    // 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

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8056517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档