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