惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 小呆也行

数据库分区(一) SQL SERVER 分区 向大数据进军 SqlServer中查看数据库所有表的表空间和索引空间信息 C#winform部署中自定义配置文件 SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点(转) url问题 - 小呆也行 - 博客园 Sql中查找数据库中,所有包含字段的表名 死亡机器(转) 厚黑口才学大全(读后感) ASP TO ASP.NET migration,a new approach (Reprinted) ASP向ASP.AET迁移要注意的问题(转) Linq的模糊查询 - 小呆也行 - 博客园 0.4-0.3==0.1 听懂面试官问题背后的潜台词 - 小呆也行 聪明人把知道说出来,而智者则不声张 我一进教室就震惊了 注册assembly的问题 学习.NET 事例网站
COM+的使用(转)
小呆也行 · 2010-07-27 · via 博客园 - 小呆也行

服务组件是用符合   CLS   的语言创作的类,该类直接或间接从   System.EnterpriseServices.ServicedComponent   类派生。以此方式配置的类可以在   COM+   应用程序中承载,并且可以通过   EnterpriseServices   命名空间使用   COM+   服务。有关受支持的服务列表,请参见可用的   COM+   服务摘要。 

COM+   服务(例如自动事务处理或排队组件)都是可以声明方式配置的。在设计时应用与服务相关的属性,并创建使用这些服务的类的实例。配置某些服务的途径是在与服务相关的类或接口上调用方法。某些服务可以从一个对象流到另一个对象。例如,配置为要求事务的对象可以在第二个对象也支持或要求事务的情况下,将事务扩展到第二个对象。 

COM+   目录中包含配置信息,可以将该配置信息应用于类的实现。在运行时,COM+   会根据您为代码提供的属性来创建上下文服务层。下面的插图显示了在   COM+   承载的两个托管对象之间流动的自动事务处理。 

创建服务组件   

定义直接或间接从   ServicedComponent   类派生的类。例如,下面的代码确保   Account   类由   COM+   应用程序承载。   
[Visual   Basic] 
Imports   System.EnterpriseServices 
Public   Class   Account   
Inherits   ServicedComponent 
Shared   Sub   Main() 
End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
public   class   Account   :   ServicedComponent 

      static   void   Main() 
      {} 

下面的代码将服务属性应用于程序集、类或方法。   
[Visual   Basic] 
Imports   System.EnterpriseServices 
<Transaction(TransactionOption.Required)>   Public   Class   Account   
Inherits   ServicedComponent 
      <AutoComplete()>   Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[Transaction(TransactionOption.Required)] 
public   class   Account   :   ServicedComponent 

      [AutoComplete] 
      static   void   Main()   
{} 

注意       在   .NET   Framework   1.1   版中,如果程序集中不存在   ApplicationAccessControlAttribute   属性,则默认情况下启用   COM+   安全配置。此行为与   .NET   Framework   1.0   版中的不同。 
可按如下所示编译该示例:   
Makefile.bat   

[Visual   Basic] 
vbc   /t:exe   /r:System.EnterpriseServices.dll   Demo.vb 

[C#] 
csc   /t:exe   /r:System.EnterpriseServices.dll   Demo.cs 

通过动态或手动注册服务组件应用程序的程序集,来部署服务组件应用程序。有关更多信息,请参见动态注册和手动注册。   
服务组件注册之后,客户端可以按照它们创建任何其他组件实例的方式来创建组件的实例。有关完整示例,请参见   Serviced   组件示例。 

注意       在   Windows   2000   平台上,COM+   总是为您创建的组件加载最新版本的公共语言运行库。这意味着在同时安装有   .NET   Framework   1.0   版和   .NET   Framework   1.1   版的计算机上,总是加载   .NET   Framework   1.1   版。为解决此问题,可以创建   COM+   dllhost.exe   配置文件,它能将所有应用程序“锁定”到特定的   .NET   Framework   版本。在   Windows   XP   和   Windows   Server   2003   平台上,可以使用“应用程序根目录”设置将   COM+   指向相应的配置文件目录。 

服务组件由   COM+   应用程序承载,且必须对该应用程序是可访问的。为了便于访问,服务组件有下面的注册和配置要求:   

程序集必须具有强名称。有关其他信息,请参见使用强名称为程序集签名。   
程序集必须在   Windows   注册表中注册。   
类型库定义必须注册并安装到特定的   COM+   应用程序中。   
以编程方式添加的服务必须在   COM+   目录中配置。   
对于服务组件有用的注册信息包括如下内容:   

COM+   应用程序标识   
激活类型   
说明信息   
COM+   应用程序标识 
可以通过名称或   GUID   标识现有的   COM+   目标应用程序。.NET   服务安装工具   (Regsvcs.exe)   提供   /appname:   选项,用于指定应用程序名。下面的示例说明如何使用程序集级的   ApplicationName   属性提供应用程序名。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<assembly:   ApplicationName( "BankComponent ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationName( "BankComponent ")] 
public   class   Account   :   ServicedComponent 

      static   void   Main()   
{} 

如果将   ApplicationID   属性(或   Guid   属性)应用到程序集,如下面的示例所示,则所有针对应用程序的搜索都基于该   GUID,而不基于应用程序名。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<assembly:   ApplicationName( "BankComponent ")> 
<   assembly:   ApplicationID( "4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationName( "BankComponent ")] 
[   assembly:   ApplicationID( "4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c ")]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   {} 

注意       对于动态注册,指定目标应用程序的唯一方式是通过在设计时应用   ApplicationNameAttribute、ApplicationIDAttribute   或   GuidAttribute   属性。.NET   安装工具   (Regsvcs.exe)   提供   /appname:   开关,以在编译时指定应用程序名或   GUID。Regsvcs.exe   还提供   /parname:   开关来标识特定的   COM+   分区。COM+   分区服务仅在   Windows   Server   2003   平台上可用。 
如果目标应用程序未被识别或未找到,那么注册机制就会使用程序集的全名而不是版本号来创建应用程序。 

警告       不要在   COM+   分区服务中使用   ApplicationIDAttribute   属性。如果使用   COM+   分区服务,应用   ApplicationIDAttribute   属性会防碍分区配置。COM+   分区服务仅在   Windows   Server   2003   平台上可用。 
激活类型 
激活类型确定服务组件是在调用方的进程(库)中还是在新进程(服务器)中创建的。可以应用   ApplicationActivationAttribute   属性来指定激活类型。 

注意       如果   ApplicationActivationAttribute   属性设置为   Server,则在可以使用服务器应用程序之前,必须用   Windows   安装程序将程序集及其所依赖的所有程序集添加到全局程序集缓存   (GAC)   中;否则,应用程序将产生异常。此外,如果   ApplicationActivationAttribute   属性设置为   Server,则服务组件的任何参数都必须标记为   Serializable,或者必须从   MarshalByRefObject   类派生。否则,应用程序将产生异常。 
下面的示例说明如何将激活类型设置为“server”。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<   assembly:   ApplicationActivation(ActivationOption.Server)> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   ApplicationActivation(ActivationOption.Server)]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   {} 

说明信息 
说明是可选的,但有时对于区分类似的程序集很有用。下面的示例说明如何应用   DescriptionAttribute   属性以设置有关程序集的说明。 

[Visual   Basic] 
Imports   System.EnterpriseServices 
<   assembly:   Description( "BankComponent   assembly ")> 
Public   Class   Account   
Inherits   ServicedComponent 
      Shared   Sub   Main() 
      End   Sub 
End   Class 

[C#] 
using   System.EnterpriseServices; 
[   assembly:   Description( "BankComponent   assembly ")]   
public   class   Account   :   ServicedComponent 

      static   void   Main()   
{}