Tải bản đầy đủ (.pdf) (385 trang)

OReilly COM and dot NET component services sep 2001 ISBN 0596001037 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.65 MB, 385 trang )


COM and .NET Com ponent Services
Dedicat ion
Foreword
Preface
Scope of This Book
Som e Assum pt ions About t he Reader
Definit ions and Text Convent ions
Ot her COM+ Books and Refer ences
How t o Cont act Us
Acknow ledgm ent s
1. COM+ Com ponent Serv ices
1.1 COM+ Com ponent Ser v ices
1.2 The Com ponent Ser vices Explor er
1.3 Hello COM+
1.4 COM+ Configur ed Com ponent s
1.5 Applicat ions, DLLs, and Com ponent s
1.6 Configur ing COM+ Applicat ions
1.7 Debugging COM+ Applicat ions
1.8 Deploy ing COM+ Applicat ions
1.9 Sum m ary
2. COM+ Cont ext
2.1 Encapsulat ion v ia Marshaling in COM
2.2 Encapsulat ion v ia I nt ercept ion in COM+
2.3 The Cont ext Obj ect
2.4 The Call Obj ect
2.5 Cr oss- Cont ext Manual Marshaling
2.6 Sum m ary
3. COM+ I nst ance Managem ent
3.1 Client Types
3.2 I nst ance Managem ent and Scaling


3.3 Obj ect Pooling
3.4 Just - in- Tim e Act iv at ion
3.5 Com bining JI TA w it h Obj ect Pooling
3.6 Obj ect Const r uct or St r ing
3.7 COM+ I nst ance Managem ent Pit falls
4. COM+ Transact ions
4.1 Transact ion Basics
4.2 Transact ion Pr opert ies
4.3 Transact ion Scenarios
4.4 COM+ Transact ions Archit ect ur e
4.5 Configur ing Transact ions
4.6 Vot ing on a Transact ion
4.7 Transact ional Obj ect Life Cycle
4.8 Designing Transact ional Com ponent s
4.9 Nont ransact ional Client s
4.10 Transact ions and Obj ect Pooling
4.11 Com pensat ing Tr ansact ions
4.12 Transact ion Ex ecut ion Tim e

2


4.13
4.14
4.15
4.16

Tracing Transact ions
I n- Doubt Transact ions
Transact ion St at ist ics

COM+ Transact ions Pit falls

5. COM+ Concur r ency Model
5.1 Obj ect - Orient ed Program m ing and Mult iple Threads
5.2 Apart m ent s: The Classic COM Solut ion
5.3 Act iv it ies: The COM+ I nnovat ion
5.4 COM+ Configurat ion Set t ings
5.5 Act iv it ies and JI TA
5.6 Act iv it ies and Transact ions
5.7 Tracing Act iv it ies
5.8 The Neut ral Threaded Apart m ent
5.9 Sum m ary
6. Pr ogram m ing t he COM+ Cat alog
6.1 Why Pr ogram t he Cat alog?
6.2 The Cat alog Progr am m ing Model
6.3 Cat alog St ruct ur e
6.4 I nt eract ing w it h t he Cat alog
6.5 Feat ur es of COMAdm inCat alog
6.6 The COM+ Cat alog and Transact ions
6.7 Sum m ary
7. COM+ Secur it y
7.1 The Need for Secur it y
7.2 Basic Secur it y Ter m s
7.3 Role- Based Secur it y
7.4 Secur ing a Ser ver Applicat ion
7.5 Secur ing a Librar y Applicat ion
7.6 Pr ogram m at ic Role- Based Secur it y
7.7 Secur it y Boundar ies
7.8 Advanced COM+ Securit y
7.9 COM+ Secur it y Pit falls

7.10 Sum m ary
8. COM+ Queued Com ponent s
8.1 Maj or Benefit s of Queued Com ponent s
8.2 Queued Com ponent s Archit ect ure
8.3 Com ponent Ser vices Explor er Configurat ion
8.4 I nvoking Queued Com ponent s on t he Client Side
8.5 Designing Queued Com ponent I nt erfaces
8.6 Receiv ing Out put from a Queued Com ponent
8.7 Queued Com ponent Er ror Handling
8.8 Queued Com ponent s and Transact ions
8.9 Sy nchr onous Versus Asy nchronous Com ponent s
8.10 Queued Com ponent s Secur it y
8.11 Queued Com ponent s Pit falls
8.12 Sum m ary
9. COM+ Ev ent Serv ice
9.1 Classic COM Ev ent s
9.2 COM+ Ev ent Model
9.3 The Event Class
9.4 Subscript ion Ty pes
9.5 Deliv ering Ev ent s

3


9.6 Ev ent Filt er ing
9.7 Dist ribut ed COM+ Ev ent s
9.8 Asy nchronous Ev ent s
9.9 COM+ Ev ent s and Transact ions
9.10 COM+ Ev ent s and Securit y
9.11 COM+ Ev ent s Lim it at ion

9.12 Sum m ary
10. .NET Serv iced Com ponent s
10.1 Developing Serv iced Com ponent s
10.2 .NET Assem blies and COM+ Applicat ions
10.3 Regist er ing Assem blies
10.4 Configur ing Ser v iced Com ponent s
10.5 Applicat ion Act iv at ion Type
10.6 The Descr ipt ion At t r ibut e
10.7 Accessing t he COM+ Cont ext
10.8 COM+ Cont ext At t ribut es
10.9 COM+ Obj ect Pooling
10.10 COM+ Just - in- Tim e Act ivat ion
10.11 COM+ Const r uct or St r ing
10.12 COM+ Transact ions
10.13 COM+ Sy nchronizat ion
10.14 Pr ogram m ing t he COM+ Cat alog
10.15 COM+ Secur it y
10.16 COM+ Queued Com ponent s
10.17 COM+ Loosely Coupled Ev ent s
10.18 Sum m ary
A. The COM+ Logbook
A.1 Logbook Requirem ent s
A.2 Log File Exam ple
A.3 Using t he Logbook
A.4 Configur ing t he Logbook
A.5 How Does t he Logbook Work?
A.6 Sum m ary
B. COM+ 1.5
B.1 I m prov ed User I nt erface Usabilit y
B.2 Legacy Applicat ions and Com ponent s

B.3 Disabling Applicat ions and Com ponent s
B.4 Pausing Applicat ions
B.5 Serv ice Act iv at ion Type
B.6 I m prov ed Queuing Support
B.7 Applicat ion Pooling and Recycling
B.8 Applicat ion Dum p
B.9 Applicat ion Part it ioning
B.10 Aliasing Com ponent s
B.11 Configurable Transact ion I solat ion Level
B.12 I m prov ed Cont ext Act ivat ion Set t ing
B.13 Pr ivat e Com ponent s
B.14 Web Serv ices in COM+ 1.5
B.15 Sum m ary
C. I nt r oduct ion t o .NET
C.1 .NET Program m ing Languages
C.2 Packaging .NET Com ponent s: Assem blies
C.3 Dev eloping .NET Com ponent s

4


C.4 Wr it ing .NET Client - Side Code
C.5 .NET as a Com ponent Technology
C.6 Com posing Assem blies
Colophon

5


D e dica t ion

To m y wife, Dana

6


For e w or d
I fir st ran int o COM+ back in 1996. I n t hose days, I was w ork ing as
a Com m on Obj ect Request Br oker Ar chit ect ure ( CORBA) consult ant
and was fr esh out of I BM, wher e I had been heav ily inv olved in
I BM’s or iginal CORBA im plem ent at ion.
CORBA was t he first of t he ar chit ect ures t hat we m ight describe
t oday as Dist ribut ed Com ponent ar chit ect ures, which set t he st age
for bot h COM/ DCOM in t he Microsoft space and RMI / I I OP in t he Java
space.
Back t hen, I was int er est ed in a part icularly k not t y problem relat ed
t o dist ribut ed com ponent archit ect ur es. Syst em s built w it h such
archit ect ures had a charact er ist ic perform ance pat t ern. They could
handle large num ber s of t r ansact ions, as long as t hose t ransact ions
originat ed from a sm all num ber of client s. So, for ex am ple, 5,000
t r ansact ions per m inut e div ided bet ween 5 client s wor ked fine. But
when t hose sam e 5,000 t r ansact ions per m inut e wer e split am ong
1,000 client s, each pr ocessing 5 t ransact ions per m inut e, t he
sy st em s chok ed.
This was odd, I t hought . Why should 5 client s, each processing
1,000 t ransact ions per m inut e, be fundam ent ally different t han
1,000 client s, each pr ocessing 5 t ransact ions per m inut e? What is
t he difference bet ween t he first 5,000 t r ansact ions per m inut e and
t he second?
Dist ribut ed com ponent archit ect ures, as t hey ex ist ed in 1996,
dict at ed a one- t o- one relat ionship bet ween client s and com ponent

inst ances. The business logic of such archit ect ur es is in t he
com ponent inst ances. And it is t he business logic t hat m ak es
t r ansact ional request s of t r ansact ional r esources, such as t he
dat abase. I n order t o m ake t r ansact ional request s, t he com ponent
inst ances r equire expensive r esources, such as dat abase
connect ions. We run out of st eam ( i.e., t r ansact ional t hroughput )
when one of t wo t hings happen: we over load t he syst em w it h
t r ansact ional request s or we run out of resources ( e.g., dat abase
connect ions) .
Clearly , going from 5 client s, each m ak ing 1,000 t ransact ional
request s per m inut e, t o 1,000 client s, each m ak ing 5 t r ansact ional
request s per m inut e, has no over all im pact on t he t ransact ional
t hr oughput . Therefore, t he r eason why our dist ribut ed com ponent
sy st em s m ust be dying is t hat we ar e running out of resour ces.
So t he answer t o get t ing lot s of client s on a dist r ibut ed com ponent
archit ect ure is not going t o com e fr om increased capabilit y of t he
back- end t r ansact ional resources ( e.g., dat abases) . I t will have t o
com e fr om som et hing else- som et hing t hat allows r esour ce shar ing.
This, t hen, is t he problem I wor ked on back in 1996. How do y ou

7


get several client s t o share resources in a dist r ibut ed com ponent
archit ect ure?
The solut ion t o t his problem cam e fr om an unex pect ed source. I
was asked t o writ e a book on COM and DCOM. I knew very lit t le
about COM and DCOM back t hen. As I look ed over t he COM/ DCOM
whit e paper s on t he Microsoft web sit e, I quickly recognized it as a
t y pical dist ribut ed com ponent archit ect ure and predict ed t he sam e

t hr oughput problem s I had seen in ot her dist r ibut ed com ponent
sy st em s.
As I browsed t hrough t he whit e paper s, I not iced an obscure bet a
product called Micr osoft Transact ion Serv er ( MTS) . At first , I
dism issed MTS as an API used t o m anage dist ribut ed t ransact ions.
But as I read m ore about MTS, I r ealized t hat it had lit t le t o do wit h
t r ansact ions. I nst ead, it at t ack ed a m uch m or e int erest ing problem :
how t o shar e r esources am ong client s. I n a nut shell, MTS addr essed
t he very problem t hat had so v exed t he exist ing dist ribut ed
com ponent syst em s- how t o support a large num ber of lowt r ansact ion generat ing client s!
I did event ually w rit e t hat book, as well as m any ar t icles on t he
im port ance of t he ideas int r oduced by MTS. Many of t hese ar t icles
appear ed in m y Obj ect Wat ch newslet t er ( available at
www.obj ect wat ch.com ) , a newslet t er t hat has, ov er t im e, becom e
influent ial in it s space.
Back in 1996, I predict ed t hat MTS would be a hist or ically im port ant
product - one t hat w ould redefine approaches t o scalabilit y in
dist ribut ed com ponent sy st em s. I n fact , t hat predict ion has com e
t r ue. Today , every infrast r uct ure designed t o suppor t high
scalabilit y in dist r ibut ed com ponent syst em s is based dir ect ly on t he
ideas, algorit hm s, and pr incipals first int roduced by MTS in 1996.
Ent erprise Jav aBeans, for exam ple, t he Jav a scalabilit y
infrast r uct ure, is alm ost a direct copy of MTS.
But w hat does t his have t o do wit h COM+ , you m ay ask. I t t urns
out t hat COM+ and MTS are one and t he sam e. Microsoft , never
know n for it s m arket ing savvy , decided t o wait unt il cust om ers
finally got used t o t he nam e MTS ( it self a m isleading nam e) , and
t hen it pulled a fast one- it swit ched t he nam e! And not j ust any
nam e, but one t hat would be as confusing as possible! So t hey
renam ed MTS as COM+ . Nat urally, cust om ers assum ed t hat COM+

was t he next release of COM. I n fact , COM+ was t he next release of
MTS.
Now Microsoft has announced .NET. Once again, t he br illiant
Microsoft m ark et ing organizat ion has left m any cust om er s confused.
I s COM+ now dead? Far fr om it —.NET is a series of int er est ing new
feat ur es, none of which r eplace COM+ . COM+ is st ill t he scalable
infrast r uct ure t hat suppor t s resour ce shar ing and deals w it h t he
m yr iad of issues ( such as securit y and t r ansact ion boundar y

8


m anagem ent ) t hat ar e so closely relat ed t o r esource sharing and so
cr ucial t o dist ribut ed applicat ions.
So whet her you ar e rushing int o Micr osoft ’s new .NET t echnology
plat for m or t aking a wait and see at t it ude, if y ou need t o put a lot of
client s around your sy st em , y ou need t o under st and COM+ .
Ther efore, t his book is very t im ely . COM+ is going t o be wit h us for
a long t im e. I t s nam e m ay change again, j ust t o confuse t he
innocent ; but t he ideas, algor it hm s, and principals will not . COM+ ,
under what ever nam e, is here t o st ay !
Roger Sessions,
CEO, Obj ect Wat ch, I nc.
Publisher, Obj ect Wat ch newslet t er ( www.obj ect wat ch.com )
Aut hor, COM+ and t he Bat t le for t he Middle Tier
Aust in, Tex as

9



Pr e fa ce
This book discusses COM+ com ponent services. Each service is
covered in it s own chapt er , and each chapt er discusses a sim ilar
range of issues: t he pr oblem t he serv ice addr esses, possible
solut ions t o t hat problem , an in- dept h descript ion of t he COM+
solut ion, t r adeoffs, design, and im plem ent at ion guidelines, t ips, and
know n pit falls. I have t ried t o prov ide useful design inform at ion and
lessons I learned while applying COM+ . I also descr ibe COM+ helper
classes and ut ilit ies I developed t hat will enhance your pr oduct ivit y
significant ly . ( The COM+ Event s helper obj ect s and t he COM+
Logbook are prim e ex am ples.) This book focuses on t he " how t o" —
t hat is, it pr ov ides pract ical inform at ion. You should read t he
chapt er s in or der , since m ost chapt ers r ely on inform at ion discussed
in t he pr eceding chapt er s. The book also aim s t o ex plain COM+ st ep
by st ep. A soft ware engineer alr eady fam iliar wit h COM who want s
t o k now what COM+ is and how t o use it can read t his book and
st ar t developing COM+ applicat ions im m ediat ely .

Scope of Th is Book
Her e is a brief sum m ary of t he chapt ers and appendixes in t his
book:






Chapt er 1 int roduces t he Com ponent Serv ices Ex plorer and
basic COM+ t er m inology. This chapt er deliberat ely holds your
hand as you develop your fir st " Hello World" COM+

com ponent . Subsequent chapt ers do m uch less handholding
and assum e y ou ar e fam iliar w it h t he COM+ env ir onm ent . I f
you alr eady have experience w it h basic COM+ developm ent,
feel fr ee t o sk ip t his chapt er.
Chapt er 2 dem yst ifies t he COM+ cont ext by present ing it as
t he key m echanism for providing com ponent services using
call int ercept ion. Generally , y ou need not be concerned wit h
cont ext s at all. How ever, t he COM+ cont ext underlies t he way
COM+ serv ices are im plem ent ed.
Chapt er 3 describes t wo scalabilit y - enabling m echanism s t hat
COM+ provides for a m odern ent erprise applicat ion: obj ect
pooling and Just - in- Tim e Act iv at ion ( JI TA) . The discussion of
inst ance m anagem ent , and especially JI TA, is independent of
t r ansact ions. Ear ly COM+ docum ent at ion and books t ended t o
couple inst ance m anagem ent and t r ansact ions. How ever, I
found t hat not only can you use inst ance m anagem ent
independent ly of t ransact ions, but it is easier t o explain it t hat
10















way. Besides explaining how t o best use obj ect pooling and
JI TA, Chapt er 3 describes ot her act iv at ion and inst ance
m anagem ent COM+ serv ices such as t he const ruct or st ring.
Chapt er 4 explains t he difficult , yet com m on, problem s t hat
t r ansact ions address, and provides you wit h a dist illed
overv iew of t r ansact ion pr ocessing and t he t r ansact ion
program m ing m odel. The difficult par t of wr it ing t his chapt er
was finding a way t o convey t he right am ount of t r ansact ion
processing t heory . I want t o help y ou under st and and accept
t he result ing program m ing m odel, but not bur y you in t he
det ails of t heory and COM+ plum bing. This chapt er focuses on
COM+ t r ansact ion ar chit ect ure and t he r esult ing design
considerat ions you have t o be aware of.
Chapt er 5 first explains t he need in t he com ponent world for a
concurr ency m odel and t he lim it at ions of t he classic COM
solut ion. I t t hen descr ibes how t he COM+ solut ion, act ivit ies,
im pr oves deficiencies of apar t m ent s.
Chapt er 6 shows how t o access com ponent and applicat ion
configurat ion inform at ion pr ogr am m at ically using t he COM+
Cat alog int er faces and obj ect s. Pr ogr am m at ic access is
requir ed when using som e adv anced COM+ serv ices and t o
aut om at e set up and dev elopm ent t ask s. This chapt er pr ov ides
you wit h com pr ehensiv e cat alog st ruct ure diagram s, plent y of
sam ple code, and a handy ut ilit y.
Chapt er 7 explains how t o secure a m odern applicat ion using
t he rich and power ful ( y et easy t o use) securit y infrast r uct ure
provided by COM+ . This chapt er defines basic securit y
concept s and shows you how t o design securit y int o y our

applicat ion from t he ground up. You can design t his secur it y
by using COM+ declar at ive secur it y via t he Com ponent
Serv ices Explorer and by using advanced program m at ic
securit y .
Chapt er 8 explains what COM+ queued com ponent s ar e and
how t o use t hem t o dev elop asy nchronous, pot ent ially
disconnect ed applicat ions and com ponent s. I n addit ion t o
showing you how t o configur e queued com ponent s, t his
chapt er addresses required changes t o t he program m ing
m odel. I f y ou have ever had t o dev elop an asynchronous
m et hod invocat ion opt ion for y our com ponent s, you w ill lov e
COM+ queued com ponent s.
Chapt er 9 covers COM+ loosely coupled ev ent s, why t her e is
a need for such a ser vice, and how t he ser vice t ies int o ot her
COM+ serv ices described in ear lier chapt er s ( such as
t r ansact ions, securit y , and queued com ponent s) . Many people
consider COM+ event s t heir fav or it e ser vice. I f you hav e had
t o confront COM connect ion point s, you will appreciat e COM+
Event s.

11











Chapt er 10 shows how .NET com ponent s can t ake adv ant age
of t he com ponent services descr ibed in t he previous chapt ers.
I f you ar e not fam iliar wit h .NET, I suggest you read Appendix
C fir st —it cont ains an int roduct ion t o .NET and C# . Chapt er
10 repeat s in C# m any of t he C+ + or VB 6.0 code sam ples
found in earlier chapt er s, showing you how t o im plem ent
t hem in .NET.
Appendix A helps you develop a useful and im port ant ut ilit y —
a flight r ecorder t hat logs m et hod calls, er rors, and event s in
your applicat ion. Logging is an essent ial part of ev ery
applicat ion and is especially im por t ant in an ent er prise
env ironm ent . The logbook is also an ex cellent ex am ple of t he
sy nergies ar riv ed at by com bining m ult iple COM+ serv ices. I t
is also a good represent at ion of t he design approaches you
m ay consider when com bining ser vices.
Appendix B describes t he changes, im provem ent s, and
enhancem ent s int roduced t o COM+ in t he next r elease of
Windows, Windows XP. I nst ead of writ ing t he book as if
Windows XP were av ailable now ( as of t his w rit ing it is only in
bet a) , I chose t o wr it e t he book for t he developer w ho has t o
deliver applicat ions t oday, using Windows 2000. When y ou
st ar t using Window s XP, all y ou need t o do is read Appendix
B—it cont ains t he addit ional inform at ion you need.
Appendix C describes t he essent ial elem ent s of t he .NET
fr am ework, such as t he r unt im e, assem blies, and how t o
dev elop .NET com ponent s. The appendix allows a reader who
is not fam iliar wit h .NET t o follow Chapt er 10.

Som e Assu m pt ion s Abou t t h e Re a der

I assum e t hat you are an experienced COM developer who feels
com for t able wit h COM basics such as int erfaces, CoClasses, and
apart m ent s. This book is about COM+ com ponent services, not t he
com ponent t echnology used t o dev elop a COM/ DCOM or .NET
com ponent . You can st ill r ead t he book wit hout t his experience, but
you will benefit m or e by having COM under your belt . I assum e y ou
dev elop your com ponent s m ost ly in C+ + and ATL and t hat you
writ e occasional, sim ple client code in Visual Basic. I also use t rivial
C# in Chapt er 10 t o dem onst rat e how .NET t akes adv ant age of
COM+ serv ices, but you don't need t o know C# t o r ead t hat
chapt er . A .NET developer should also find t his book useful: r ead
and under st and t he ser vices in Chapt er 1 t hr ough Chapt er 9, and
t hen use Chapt er 10 as a refer ence guide for t he sy nt ax of .NET
at t r ibut es.

12


D ef in it ion s a n d Te x t Con ve n t ion s
The following definit ions and conv ent ions apply t hr oughout t his
book:








A com ponent is an im plem ent at ion of a set of int er faces. A

com ponent is what y ou m ark in your I DL file ( or t ype libr ary )
wit h CoClass or a class in C# .
An obj ect is an inst ance of a com ponent . You can creat e
obj ect s by calling CoCreateInstance( ) in C+ + , specify ing
t he class I D ( t he t ype) of t he obj ect you want t o creat e. I f you
use Visual Basic 6.0, you can cr eat e obj ect s using new or
CreateObject( ). A C# client uses new t o creat e a new
inst ance of a com ponent .
I use t he following t erm s in t he book: CoCr eat ing refers t o
calling CoCreateInstance() in C+ + , or new or
CreateObject( ) in Visual Basic. Query ing an obj ect for an
int er face r efer s t o calling IUnknown::QueryInterface( ) on
t he obj ect . Releasing an obj ect refers t o calling
IUnknown::Release( ) on t he obj ect .
The graphical not at ions in Figur e P- 1 are used in alm ost ev ery
design diagram in t he book. The " lollipop" denot es an
int er face, and a m et hod call on an int er face is r epresent ed by
an ar row beginning wit h a full circle.
Figu r e P- 1 . I n t e rfa ce a n d m e t h od call g ra ph ica l n ot a t ion s



Err or handling in t he code sam ples is r udim ent ar y. The code
sam ples serve t o dem onst r at e a design or a t echnical point ,
and clut t er ing t hem wit h t oo m uch er ror handing would m iss
t he point . I n a pr oduct ion envir onm ent , y ou should ver ify t he
ret ur ned HRESULT of every COM call, cat ch and handle
except ions in C# , and assert every assum pt ion.

I use t he following font convent ions in t his book:




I t alic is used for new t erm s, cit at ions, online links, filenam es,
dir ect ories, and pat hnam es.
Constant width is used t o indicat e com m and- line com put er
out put and code exam ples, as well as classes, const ant s,
funct ions, int erfaces, m et hods, variables, and flow- cont r olled
st at em ent s.
13





Constant-width bold is used for code em phasis and user
input .
Constant-width italic is used t o indicat e r eplaceable
elem ent s in code st at em ent s.
This icon indicat es a not e or t ip.

This icon indicat es a war ning.

Ot h er COM + Book s a n d Refe r e n ce s
This book describes how t o use COM+ com ponent serv ices in y our
applicat ion. I t focuses on how t o apply t he t echnology , how t o av oid
specific pit falls, and design guidelines. I f you want t o know m or e
about COM+ in general and t he nat ure of com ponent t echnology , I
recom m end t he following t wo books t hat helped m e a great deal in
m y at t em pt t o gr asp COM+ .

COM+ and t he Bat t le for t he Middle Tier by Roger Sessions ( John
Wiley & Sons, 2000) is hands down t he best " why" COM+ book. I t
explains in det ail, w it h excellent exam ples and in plain language,
t he need for soft ware com ponent s and com ponent services. For
exam ple, inst ead of t he page or t wo t his book includes on t he
m ot ivat ion for using t r ansact ions, Sessions devot es t wo fascinat ing
chapt er s t o t he t opic. The book goes on t o com par e ex ist ing
com ponent t echnologies ( such as COM, CORBA, and Jav a) and t heir
corr esponding suit es of com ponent serv ices. I t also cont ains a few
case st udies fr om r eal- life syst em s t hat use COM+ . Roger Sessions
also has a unique way of eloquent ly nam ing t hings— pr ov iding t he
m ost appr opr iat e t erm , which is oft en not t he nam e Microsoft uses.
Whenever it m akes sense, t his book uses Sessions't er m inology,
such as " inst ance m anagem ent " inst ead of t he Microsoft t er m
" act ivat ion."
Underst anding COM+ by David S. Plat t ( Micr osoft Press, 1999) is
probably t he best " what " COM+ book . The book describes t he
serv ices available by COM+ and provides sidebar sum m aries for t he
busy reader . I t is one of t he first COM+ books, and Plat t worked on
it closely wit h t he COM+ t eam .
I also used t he MSDN Librar y ext ensively, especially t he
" Com ponent Services" sect ion, w hile writ ing t his book. Alt hough t he
infor m at ion in t his libr ary t ends t o be t erse, t he over all st r uct ure is
good. Use t his book t o learn how t o apply COM+ product ively and

14


effect ively , and use t he MSDN Librar y as a reference for t echnical
det ails and a sour ce for addit ional infor m at ion.


H ow t o Con t a ct Us
We have t est ed and v erified t he inform at ion in t his book t o t he best
of our abilit y, but y ou m ay find t hat feat ures have changed ( or even
t hat we hav e m ade m ist akes! ) . Please address com m ent s and
quest ions concer ning t his book t o t he publisher:
O’Reilly & Associat es, I nc.
101 Morris St reet
Sebast opol, CA 95472
( 800) 998- 9938 ( in t he Unit ed St at es or Canada)
( 707) 829- 0515 ( int ernat ional/ local)
( 707) 829- 0104 ( fax)
The web sit e for t he book list s exam ples, err at a, and plans for
fut ure edit ions. You can access t his page at :
ht t p: / / www.or eilly .com / cat alog/ com dot net svs
To ask t echnical quest ions or com m ent on t his book, send em ail t o:
bookquest ions@or eilly .com
Or t o m e dir ect ly:
j uval.low y@com ponent w are.net
For m or e inform at ion about our books, conferences, soft ware,
resource cent ers, and t he O’Reilly Net work, see our web sit e:
ht t p: / / www.or eilly .com

Ack now le dgm e n t s
A book is by no m eans t he pr oduct of j ust t he aut hor’s work. I t is
t he result of m any ev ent s and individuals, like links in a chain. I
cannot possibly nam e everyone, ranging from m y parent s t o m y
fr iends. I am especially gr at eful for m y t wo friends and colleagues,
Marcus Pellet ier and Chris W. Rea. Marcus wor ked wit h m e on large
COM+ proj ect s, and t oget her we confront ed t he unknown. Marcus’s

t horoughness and t echnical expert ise is a m odel for ev ery
program m er . Chris’s com m ent s and insight int o a r eader ’s m ind
hav e cont ribut ed great ly t o t his book ’s accuracy, int egrit y , and flow.
I w ish t o t hank Yasser Shohoud for v erifying m y appr oach t o
t r ansact ion processing and sharing wit h m e his own, Richar d Grim es
for r eviewing t he book, and Roger Sessions for writ ing t he
For eword. Thank s also t o Johnny Blum enst ock for providing m e wit h
a place t o writ e. Finally, t his book would not be possible wit hout m y

15


wife, Dana, whose const ant support and encouragem ent m ade t his
book a r ealit y. Thank you, Dana.

16


Cha pt e r 1 . COM + Com pone n t Se r vice s
By now, m ost developers of lar ge- scale ent erprise applicat ions ar e
convinced of t he benefit s of com ponent - orient ed developm ent . They
hav e discover ed t hat by br eak ing a large sy st em down int o sm aller
unit s, t hey can w rit e code t hat is easier t o reuse on ot her proj ect s,
easier t o dist r ibut e across m ult iple com put ers, and easier t o
m aint ain. As long as t hese com ponent s adhere t o a binary st andard
t hat defines how t hey com m unicat e wit h one anot her, t hey can be
inv oked as needed at runt im e and discarded when t hey have
finished t heir wor k. This t y pe of applicat ion is also par t icularly
suit ed t o t he Web, wher e client s request ser vices of rem ot e
applicat ions and t hen, once sat isfied, m ove on t o ot her t asks.

For nearly a decade, t he Microsoft Com ponent Obj ect Model ( COM)
has been t he st andard for com ponent s t hat r un on Windows
m achines, including Windows 9x and Me client s and Windows NT
and 2000 server s. The COM m odel is well docum ent ed by t he
Microsoft Com ponent Obj ect Model Specificat ion. Tools such as
Visual C+ + and Visual Basic m ake it easy t o cr eat e COM
com ponent s, and scor es of book s, t raining classes, and art icles are
available t o t each pr ogr am m ers how t o use t hem . Many feat ures of
t he Windows operat ing syst em are now im plem ent ed as COM
com ponent s, and m any com panies have inv est ed heav ily in COMbased sy st em s of t heir own.
I n July 2000, Microsoft announced a radically new com ponent m odel
as par t of it s .NET developm ent plat form , suddenly calling int o
quest ion t he viabilit y of exist ing COM applicat ions. .NET com ponent s
bear lit t le resem blance t o legacy COM com ponent s and ar e not
backw ards com pat ible. They can be m ade t o int eroper at e wit h COM
com ponent s but do not do so nat ur ally.
When it com es t o t he services and t ools program m er s use t o build
ent er prise- scale .NET applicat ions, how ever, one facilit y cont inues
t o prov ide t he necessary runt im e infrast ruct ur e and ser vices: COM+
com ponent services. These serv ices have been available on
Windows 2000 since it s release, but t hey will gain great er
im port ance in t he m ont hs ahead. As it t ur ns out , t hey offer a bridge
bet ween t radit ional COM and .NET applicat ions, m ak ing y our
underst anding and m ast er y of t hem as im port ant now as it has ever
been.
I n t his chapt er, we prov ide a quick over view of t he COM+ suit e of
com ponent services and t hen int roduce y ou t o t he Com ponent
Serv ices Explorer, your pr im ary t ool for building and m anaging bot h
COM and .NET ent erpr ise applicat ions. You will also creat e, debug,
and deploy a sim ple COM+ " Hello Wor ld" applicat ion, using a

t r adit ional COM com ponent and learning about COM+ applicat ion
t y pes and configured com ponent s as y ou do so.
17


1 .1 COM+ Com pon e n t Ser vice s
Com ponent s need runt im e services t o work. The original COM
runt im e support ed com ponent s locat ed on t he sam e m achine,
t y pically a desk t op PC. As t he focus of Windows developm ent
shift ed from st andalone PCs t o net worked syst em s, Microsoft found
it necessary t o add addit ional serv ices ( see The Evolut ion of COM+
Serv ices) . Fir st , t hey added support for dist r ibut ed applicat ions, or
applicat ions whose com ponent s ar e locat ed on m or e t han one
m achine ( som et im es r eferred t o as " COM on a wire" ) . Lat er ,
Microsoft added new services t o support ent er prise applicat ions,
whose com plexit y and scale placed new dem ands on t he r esources
of a syst em and required an ent irely new level of support . These
t r ends were only exacer bat ed by t he m ove t o web- based
applicat ions aim ed at huge num ber s of cust om er s connect ed over
t he public I nt ernet .
Collect ively, t he services t hat support COM and .NET com ponent based applicat ions ar e known as t he COM+ com ponent ser vices, or
sim ply as COM+ .

The Evolut ion of COM + Se r vice s
COM solved a num ber of pr oblem s facing early com ponent
dev eloper s by prov iding a binary st andar d for com ponent s,
defining a com m unicat ion int er face, and providing a way to
link com ponent s dynam ically. COM freed developer s fr om
hav ing t o deal w it h " plum bing" and connect ivit y issues,
allowing t hem t o concent rat e on designing com ponent s.

By t he m id- 1990s, however , it was clear t hat Windows
dev eloper s needed addit ional ser vices t o suppor t dist ribut ed
and t ransact ion- or ient ed applicat ions. Dist r ibut ed COM
( DCOM) was released in 1995, a specificat ion and ser vice
used t o dist r ibut e com ponent s across differ ent m achines and
inv oke t hem rem ot ely. Then, Microsoft r eleased t he Micr osoft
Transact ion Serv er ( MTS) in 1998, which provided
com ponent developers wit h new ser vices for t ransact ion
m anagem ent , declarat ive r ole- based securit y , inst ance
act ivat ion m anagem ent , com ponent deploym ent and
inst allat ion, and an adm inist rat ion t ool for m anaging
com ponent configurat ions.
Ther e was m ore t o MTS t han j ust new ser vices. MTS
represent ed a program m ing m odel in w hich t he com ponent
dev eloper sim ply declared ( using t he MTS adm inist r at ive
t ool) which ser vices a com ponent r equired, and left it t o MTS
t o prov ide an appr opr iat e r unt im e env ir onm ent . Dev eloper s
18


could now spend even less effor t on low - level serv ice
plum bing ( such as int eract ing wit h t ransact ion pr ocessing
m onit ors or m anaging t he life cycle of an obj ect ) , and m ore
on t he business logic t he cust om er paid for. Yet , MTS had it s
lim it at ions. Forem ost was t he fact t hat MTS was built on t op
of conv ent ional COM/ DCOM. The underlying operat ing
sy st em and COM it self wer e unawar e t hat MTS ev en exist ed.
MTS resort ed t o esot eric hacks and kludges t o provide it s
serv ices, and MTS could not provide it s ser vices t o every
COM obj ect ( m ult it hreaded apart m ent obj ect s were

excluded) . Som e serv ices, such as obj ect pooling, were
eit her not possible or unav ailable.
The developm ent of a new v ersion of t he Windows NT
operat ing syst em ( init ially called NT 5.0 and lat er renam ed
Windows 2000) , gave Microsoft an oppor t unit y t o cor rect t he
deficiencies of MTS and DCOM by fusing t hem int o a new
com pr ehensiv e com ponent services suit e. Micr osoft added
yet m or e services, including obj ect pooling, queued
com ponent s, and event s, and m ade t he package a part of
t he core Windows operat ing syst em . The new suit e of
serv ices was nam ed COM+ 1.0, t he subj ect of t his book. The
nex t version of COM+ , COM+ 1.5, is scheduled for r elease
wit h Windows XP in Q4 2001 and is described in Appendix B.
The COM+ acronym is an ov erloaded and oft en m isused
t erm . Today it is used inform ally t o refer t o bot h t he lat est
ver sion of t he COM com ponent specificat ion and t he
com ponent services available on t he lat est ver sions of
Windows. I n t his book, we use t he t er m COM+ t o refer t o t he
COM+ com ponent services. When we speak of COM+
com ponent s, we refer t o COM com ponent s configured t o run
under t hose services. Howev er, as y ou will see, a COM+
applicat ion m ay consist of eit her COM or .NET com ponent s
( see COM+ : The Migrat ion Pat h t o .NET) .
Her e is a quick sum m ar y of t he m ost im port ant serv ices prov ided
by COM+ :
Adm inist r at ion
Tools and serv ices t hat enable program m ers and
adm inist rat ors t o configure and m anage com ponent s and
com ponent - based applicat ions. The m ost im por t ant t ool is t he
Microsoft Managem ent Console Com ponent Serv ices Ex plorer.

COM+ also prov ides a st andard locat ion, t he COM+ Cat alog,
for st oring configur at ion infor m at ion. The Com ponent Services
Explorer is explained in t he following sect ion. The COM+
Cat alog is descr ibed in Chapt er 6.
Just - in- Tim e Act ivat ion ( JI TA)

19


Serv ices t hat inst ant iat e com ponent s w hen t hey are called
and discard t hem when t heir wor k is done. JI TA is ex plained
in Chapt er 3.
Obj ect pooling
Serv ices t hat allow inst ances of fr equent ly used, but
expensive, r esour ces, such as dat abase connect ions, t o be
m aint ained in a pool for use by num er ous client s. Obj ect
pooling can im prove t he per form ance and responsiveness of a
dist ribut ed applicat ion dram at ically . I t is explained in Chapt er
3.
Transact ions
Serv ices t hat allow oper at ions carr ied out by dist r ibut ed
com ponent s and resources such as dat abases t o be t reat ed as
a single oper at ion. Transact ion m anagem ent is a requirem ent
of m ost com m ercial syst em s. COM+ Tr ansact ion ser vices are
discussed in Chapt er 4.
Sy nchr onizat ion
Serv ices for cont rolling concurrent access t o obj ect s. These
serv ices are explained in Chapt er 5.
Securit y
Serv ices for aut hent icat ing client s and cont rolling access t o an

applicat ion. COM+ support s r ole- based securit y , which is
explained in Chapt er 7.
Queued com ponent s
Serv ices t hat allow com ponent s t o com m unicat e t hrough
asynchronous m essaging, a feat ur e t hat m ak es possible
loosely coupled applicat ions or even disconnect ed
applicat ions. Queued com ponent s are discussed in Chapt er 8.
Event s
Serv ices t hat allow com ponent s t o infor m one anot her of
significant ev ent s, such as changes in dat a or sy st em st at e.
COM+ suppor t s a publish- subscr ibe m odel of event
not ificat ion, which is described in Chapt er 9.
To sum m arize, COM+ is about com ponent ser vices and has alm ost
not hing t o do wit h t he way a com ponent is developed. The .NET
fr am ework allows you t o develop binary com ponent s m or e easily
t han does COM, but it cont inues t o r ely on com ponent serv ices
available t hrough COM+ . The m anner in which .NET and COM
com ponent s ar e configur ed t o use t hese ser vices, howev er , is not
t he sam e. Cur rent ly, m ost Windows ent erpr ise developer s are
dev eloping applicat ions based on t he exist ing COM st andard using
Visual Basic 6 and Visual C+ + 6 wit h ATL. For t his reason, t his book
uses COM ex am ples t o dem onst rat e COM+ . However, t hese sam e
serv ices are available t o .NET com ponent s as well. Chapt er 10
shows you how t o use t hem .
COM+ 1.0 is an int egr al part of Windows 2000 and r equir es no
special inst allat ion. Som e COM+ feat ur es ar e av ailable only when

20



bot h t he client and server are running on Windows 2000 m achines,
but COM+ client s can usually r un on Windows 9.x and Windows NT
m achines as well.

COM + : The M igr a t ion Pa t h t o .N ET
.NET is Microsoft ’s next - generat ion com ponent t echnology
and applicat ion developm ent plat for m . ( For a quick overv iew
of t he .NET plat for m , see Appendix C.) However , adopt ing a
radically new t echnology such as .NET is never an easy
endeav or for com panies and dev eloper s. Most have m ade a
considerable invest m ent in an ex ist ing, oft en COM- based,
code base and t he developer sk ills needed t o m aint ain it .
Unless com panies hav e a com pelling reason t o m ove t o .NET
or a r easonable m igr at ion pat h, t hey post pone or avoid
m ak ing t he change.
However, because COM and .NET com ponent s can coexist in
t he sam e COM+ applicat ion, com panies can cont inue t o build
COM com ponent s t oday , adding .NET ser viced com ponent s t o
t heir applicat ions at a lat er t im e when t he advant ages of
doing so are m ore com pelling. This is a m igrat ion st r at egy
wort h y our considerat ion.
When Windows XP is released in Q4 2001, it will include a new
ver sion of COM+ com ponent ser vices, COM+ 1.5. This new ver sion
im pr oves COM+ 1.0 usabilit y and addr esses som e of t he pit falls of
using COM+ 1.0 on Windows 2000, as described in t his book. COM+
1.5 also adds new feat ur es t o ex ist ing services and lay s t he
foundat ion for int egrat ion wit h .NET web serv ices. Appendix B
sum m ar izes t he fort hcom ing changes.

1 .2 Th e Com pone n t Ser vice s Ex plor e r

COM+ com ponent s and applicat ions ar e m anaged t hrough t he
Com ponent Services Explorer ( form erly known as t he COM+
Explorer) .The Com ponent Serv ices Explorer is a Microsoft
Managem ent Console snap- in and is available on ev ery Windows
2000 m achine.
To fir e up t he Com ponent Ser vices Explor er, go t o t he St art m enu
and select Set t ings
Cont rol Panel. When t he Cont r ol Panel window
appear s, select t he Adm inist rat ive Tools direct ory and t hen select
t he Com ponent Ser vices applicat ion.
The first t hing you should do aft er locat ing t he Com ponent Ser vices
Explorer is cr eat e a shor t cut t o it on y our desk t op. As a dev eloper ,
you need easy access t o t he Com ponent Services Explor er , your
m ain gat eway int o COM+ ( see Figure 1- 1) . You can use t he
Com ponent Services Explorer t o creat e and configur e COM+
21


applicat ions, im port and configure COM or .NET com ponent s, expor t
and deploy your applicat ions, and adm inist er y our local m achine.
You can even adm inist er COM+ on ot her m achines on t he net work,
provided y ou have adm inist rat ive priv ileges on t hose m achines.
A COM+ applicat ion is a logical gr oup of COM+ com ponent s.
Com ponent s usually share an applicat ion if t hey depend on one
anot her t o accom plish t heir t ask s and when all t he com ponent s
requir e t he sam e applicat ion level configur at ion, as wit h securit y or
act ivat ion policy . Com ponent s in t he sam e applicat ion are oft en
dev eloped by t he sam e t eam , and are m eant t o be deployed
t oget her .
You can see all t he COM+ applicat ions inst alled on your m achine by

opening t he Com ponent Ser vices Explor er and expanding t he
Com put er s folder in t he Tr ee window: Com put ers
My Com put er
COM+ Applicat ions. Ev ery icon in t he COM+ Applicat ions folder
represent s a COM+ applicat ion. Each COM+ applicat ion cont ains
COM+ com ponent s. Com ponent s m ust be explicit ly im port ed int o
t he Com ponent Ser vices Explor er t o t ak e advant age of COM+
serv ices.
The Com ponent Serv ices Explorer offers a hier archical approach t o
m anaging COM+ serv ices and configur at ions: a com put er cont ains
applicat ions, and an applicat ion cont ains com ponent s. A com ponent
has int erfaces, and an int erface has m et hods. Each it em in t he
hierar chy has it s ow n configurable proper t ies. Not e t hat t he
hierar chy allows you t o v iew t he par am et ers of any m et hod list ed in
t he hierarchy.
Figu r e 1 - 1 . Th e Com p on ent Act ivat ion t ab ( see Figur e B- 15) and
adding a new act iv at ion opt ion. The Act ivat ion Cont ext proper t ies
group cont ains t hree radio but t ons. You can select only one of t he
but t ons at a t im e— t hus enforcing m ut ual ex clusion. I f you select
" Don't force act ivat ion cont ext ," you act ually select t he regular
COM+ cont ext act iv at ion behavior. I n t his m ode, you can enable
JI TA, t ransact ions, and secur it y access checks. I n fact , as long as
t r ansact ion support or access securit y ar e enabled, you cannot

367


select anot her opt ion; enabling securit y checks set s t he select ion
back t o " Don’t force act ivat ion cont ex t " fr om any ot her set t ing.
COM+ 1.5 adds a new cont ext act ivat ion select ion— " Must be

act ivat ed in t he default cont ext ." This new opt ion can be useful
when y ou k now t hat client s of t he com ponent r eside in t he default
cont ext and m ak e frequent calls of shor t dur at ion t o y our
com ponent , and t hat y our com ponent does not use m ost of t he
COM+ serv ices.
Figu r e B- 1 5 . Th e n ew COM + 1 .5 com pon e nt Act iva t ion t a b

B.1 3 Pr iva t e Com pon en t s
COM+ 1.5 provides a new feat ur e called privat e com ponent s. Every
com ponent has, at t he bot t om of it s act ivat ion t ab, t he " Mar k
com ponent privat e t o applicat ion" checkbox ( see Figur e B- 15) . A
privat e com ponent can only be accessed by ot her com ponent s in
t he sam e applicat ion. Privat e com ponent s ar e needed in alm ost
every decent size COM+ proj ect . To prom ot e loose coupling
bet ween client s and obj ect s, y ou should avoid pr oviding t he client s
wit h access t o t he int ernal obj ect s by m ar king t hem as priv at e.

.N ET Pr iva t e Se r vice d Com pone nt
A .NET t ransact ional ser viced com ponent can declar e it self as
a privat e com ponent , using t he Pr ivat eCom ponent at t ribut e:

368


[PrivateComponent]
public class MyComponent :ServicedComponent
{}
Not e t hat a priv at e com ponent is different from an int ernal
com ponent . Declar ing t he class as int er nal inst ead of public
prevent s access t o it from out side it s assem bly. A pr ivat e

com ponent cannot be accessed by client s out side it s COM+
applicat ion, but it can be accessed by ot her client s in t he
sam e applicat ion, including com ponent s from ot her
assem blies.

B.1 4 W e b Se r v ices in COM+ 1 .5
Web services support is t he m ost ex cit ing new feat ur e of t he .NET
plat for m . As explained in Chapt er 10, web serv ices allow a m iddlet ier com ponent in one web sit e t o inv oke m et hods on anot her
m iddle- t ier com ponent at anot her web sit e, wit h t he sam e ease as if
t he t wo com ponent s wer e on t he sam e sit e and m achine. But .NET
web services com e w it h a pr ice— com panies have t o invest in
learning new languages such as C# and cope wit h a new
program m ing m odel and new class libraries. I n m ost or ganizat ions,
t his cost is subst ant ial. To preserve exist ing inv est m ent in COM
com ponent s and dev elopm ent expert ise, while providing a m igrat ion
pat h t o t he .NET wor ld, COM+ 1.5 can expose any COM+
com ponent t hat com plies wit h w eb ser vices design guidelines as a
web service. The applicat ion act iv at ion t ab let s you configure SOAP
act ivat ion for your applicat ion ( see Figure B- 7) . All y ou need t o do is
specify t he vir t ual dir ect ory of t he web serv ice associat ed wit h t his
applicat ion, and COM+ provides t he necessary adapt ors as a
com ponent service. Each com ponent is exposed as a separat e web
serv ice, ident ified by t he com ponent prog- I D under t he v irt ual
dir ect ory . COM+ inst alls t he web services wit h I I S and generat es
t he proper web service configur at ion and infor m at ion files. Not e t hat
I I S and .NET m ust be inst alled on t he serv er and client m achine t o
enable t he SOAP act iv at ion m ode for y our applicat ion.

B.1 5 Su m m a r y
COM+ is essent ial for rapid com ponent dev elopm ent and r obust ,

scalable applicat ions. COM+ 1.5 sm oot hes COM+ 1.0's rough edges,
and it s new feat ur es ar e a m ost welcom e addit ion t o y our
dev elopm ent arsenal. Fut ure r eleases of COM+ will m ost lik ely
int roduce new feat ur es and com ponent ser vices, probably t o

369


com plem ent new capabilit ies available wit h .NET ( such as t he web
serv ices support ) and im prove t he int egr at ion bet ween t he t wo.
Especially not ewort hy is COM+ 1.5’s support for legacy com ponent s
and applicat ions. The m essage is clear: use COM+ as a support ing
com ponent services plat for m and unify in t he sam e ar chit ect ure all
your com ponent s— fr om classic COM com ponent s, t o COM+
configured com ponent s, t o .NET serv iced com ponent s.
As m ent ioned at t he beginning of t he book, COM+ offers a
m igr at ion pat h for com panies and developers. Com panies can st ar t
( or cont inue) t heir pr oj ect s in COM, using COM+ for com ponent
serv ices. When t he t im e com es t o m ov e t o .NET, t hey can st ar t
plugging int o t he sam e ar chit ect ure .NET serv iced com ponent s in a
seam less m anner , r eusing and int er act ing wit h t heir exist ing COM
and COM+ configur ed com ponent s.

370


×