Acknowledgments |
|
xv | |
Introduction |
|
xvii | |
|
|
|
|
3 | (44) |
|
From Past to Present Platform |
|
|
4 | (8) |
|
|
4 | (1) |
|
|
5 | (2) |
|
|
7 | (1) |
|
|
8 | (1) |
|
|
9 | (3) |
|
|
12 | (3) |
|
|
12 | (1) |
|
Application Integration Services |
|
|
13 | (1) |
|
|
13 | (1) |
|
Web Services vs .NET Remoting |
|
|
14 | (1) |
|
|
15 | (15) |
|
A Simple Example in Notepad |
|
|
15 | (2) |
|
The Life Cycle of a Web Service Request |
|
|
17 | (4) |
|
A Simple Example in Web Matrix |
|
|
21 | (2) |
|
A Simple Example in Visual Studio .NET |
|
|
23 | (4) |
|
|
27 | (3) |
|
Developing a Web Service Client |
|
|
30 | (9) |
|
A Simple Windows Forms Client |
|
|
31 | (1) |
|
|
31 | (1) |
|
|
32 | (4) |
|
Adding a Reference Manually |
|
|
36 | (3) |
|
|
39 | (2) |
|
|
39 | (1) |
|
|
40 | (1) |
|
Building on the Foundation |
|
|
41 | (4) |
|
|
41 | (1) |
|
Incorporating Transactions |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
45 | (2) |
|
|
47 | (50) |
|
|
48 | (2) |
|
|
50 | (1) |
|
The SOAP Message Structure |
|
|
50 | (3) |
|
|
51 | (1) |
|
|
52 | (1) |
|
The Current State of the SOAP Standard |
|
|
53 | (2) |
|
|
53 | (1) |
|
|
54 | (1) |
|
Elements Defined in the SOAP Standard |
|
|
55 | (33) |
|
|
55 | (1) |
|
|
56 | (3) |
|
Simple Types in a SOAP Body |
|
|
59 | (4) |
|
|
63 | (7) |
|
|
70 | (1) |
|
Sending Information via HTTP-POST |
|
|
71 | (1) |
|
Changes to Bindings in SOAP 1.2 |
|
|
72 | (1) |
|
Binding to Other Protocols |
|
|
73 | (1) |
|
Sending Datasets via an Application |
|
|
73 | (7) |
|
|
80 | (3) |
|
Processing and Building a SOAP Header with .NET |
|
|
83 | (5) |
|
SOAP Exceptions and Errors |
|
|
88 | (6) |
|
|
89 | (5) |
|
|
94 | (1) |
|
|
94 | (3) |
|
|
97 | (46) |
|
|
98 | (22) |
|
|
101 | (3) |
|
|
104 | (8) |
|
|
112 | (8) |
|
|
120 | (16) |
|
|
121 | (1) |
|
|
122 | (3) |
|
Other Configuration Options |
|
|
125 | (4) |
|
Specifying Documentation Elements |
|
|
129 | (2) |
|
|
131 | (2) |
|
|
133 | (3) |
|
|
136 | (5) |
|
|
136 | (1) |
|
|
137 | (4) |
|
|
141 | (2) |
|
|
143 | (62) |
|
Microsoft Discovery (DISCO) |
|
|
144 | (8) |
|
|
144 | (1) |
|
|
145 | (4) |
|
Visual Studio .NET and DISCO Files |
|
|
149 | (3) |
|
Universal Description, Discovery, and Integration (UDDI) |
|
|
152 | (50) |
|
The UDDI Business Registries |
|
|
154 | (1) |
|
Categorization and Identification |
|
|
155 | (2) |
|
Searching for Web Services |
|
|
157 | (3) |
|
|
160 | (3) |
|
|
163 | (3) |
|
|
166 | (16) |
|
|
182 | (13) |
|
Visual Studio .NET and UDDI |
|
|
195 | (4) |
|
UDDI Enterprise Services in Windows 2003 Server |
|
|
199 | (3) |
|
|
202 | (3) |
|
|
205 | (36) |
|
|
206 | (9) |
|
Approximating the Default Handler |
|
|
207 | (8) |
|
|
215 | (7) |
|
|
215 | (2) |
|
Inside the ASP.NET HTTP Pipeline |
|
|
217 | (5) |
|
Working with XML Directly |
|
|
222 | (9) |
|
Using the XML Streaming API |
|
|
222 | (4) |
|
|
226 | (1) |
|
|
227 | (4) |
|
|
231 | (3) |
|
|
231 | (1) |
|
|
232 | (2) |
|
Coding Differences Between the Handler API and the Web Method API |
|
|
234 | (2) |
|
Taking Care with Session State |
|
|
235 | (1) |
|
|
236 | (4) |
|
|
240 | (1) |
|
Writing Schemas for Your Services |
|
|
241 | (52) |
|
The Role of Schemas in Web Services |
|
|
242 | (1) |
|
Writing a Schema Explicitly |
|
|
243 | (17) |
|
The Root <schema> Element |
|
|
244 | (1) |
|
Associating Schemas with Instance Documents |
|
|
245 | (1) |
|
|
246 | (2) |
|
|
248 | (1) |
|
|
249 | (9) |
|
Element and Attribute Groups |
|
|
258 | (1) |
|
|
258 | (1) |
|
|
259 | (1) |
|
Incorporating a Schema into Your Web Service |
|
|
260 | (7) |
|
Using the XML Schema Definition Tool |
|
|
260 | (3) |
|
What the Serializer Doesn't Do |
|
|
263 | (2) |
|
|
265 | (2) |
|
SOAP, WSDL, Encoding, and Styles |
|
|
267 | (1) |
|
Writing Schemas Implicitly |
|
|
268 | (20) |
|
Working with Document/Literal Services |
|
|
269 | (17) |
|
Serialization Attributes for Encoded Services |
|
|
286 | (2) |
|
Serializer-Unfriendly Classes |
|
|
288 | (1) |
|
The Other .NET Serializer |
|
|
288 | (1) |
|
|
289 | (4) |
|
Part II Building on the Core |
|
|
|
|
293 | (44) |
|
|
293 | (1) |
|
The XML Web Service Code Model |
|
|
294 | (6) |
|
The @WebService Processing Directive |
|
|
294 | (2) |
|
|
296 | (1) |
|
|
297 | (1) |
|
Configuring Web Methods Using Attributes |
|
|
298 | (2) |
|
|
300 | (5) |
|
|
302 | (1) |
|
|
302 | (3) |
|
Tweaking Your Web Methods |
|
|
305 | (6) |
|
|
306 | (4) |
|
|
310 | (1) |
|
|
311 | (4) |
|
|
312 | (1) |
|
|
313 | (2) |
|
|
315 | (12) |
|
When Should You Maintain State? |
|
|
316 | (2) |
|
Maintaining State on the Server |
|
|
318 | (4) |
|
Asynchronous Web Services |
|
|
322 | (1) |
|
|
323 | (1) |
|
|
323 | (1) |
|
|
324 | (3) |
|
Getting Your Web Method to Work |
|
|
327 | (9) |
|
|
327 | (4) |
|
|
331 | (3) |
|
Discovery of the Web Service |
|
|
334 | (2) |
|
|
336 | (1) |
|
|
337 | (40) |
|
|
337 | (1) |
|
The .NET Model of Web Service Consumption |
|
|
338 | (26) |
|
Finding and Consuming a Web Service |
|
|
338 | (4) |
|
|
342 | (2) |
|
|
344 | (11) |
|
|
355 | (9) |
|
When the Client Doesn't Use .NET |
|
|
364 | (8) |
|
Consuming a Web Service from Old COM Applications |
|
|
364 | (5) |
|
|
369 | (3) |
|
Working with XML in the Client |
|
|
372 | (4) |
|
Using XSLT for User Interface Purposes |
|
|
373 | (3) |
|
Using XSLT for Noninterface Purposes |
|
|
376 | (1) |
|
|
376 | (1) |
|
|
377 | (46) |
|
Data Access Using ADO.NET |
|
|
378 | (13) |
|
|
378 | (4) |
|
|
382 | (7) |
|
ADO.NET Data Access Recommendations |
|
|
389 | (2) |
|
Using ADO.NET to Access Custom Data Sources |
|
|
391 | (26) |
|
|
392 | (1) |
|
|
392 | (25) |
|
|
417 | (4) |
|
Querying XML Data Sources |
|
|
417 | (2) |
|
Addressing a DataSet as XML |
|
|
419 | (1) |
|
|
420 | (1) |
|
Exposing Other Data as XML |
|
|
421 | (1) |
|
|
421 | (2) |
|
Extending the Web Services Framework |
|
|
423 | (34) |
|
HTTP Modules vs. SOAP Extensions |
|
|
424 | (3) |
|
|
424 | (2) |
|
|
426 | (1) |
|
|
427 | (10) |
|
|
427 | (2) |
|
The IHttpModule Interface |
|
|
429 | (2) |
|
Events Exposed by Modules |
|
|
431 | (3) |
|
Deploying a Module to a Web Application |
|
|
434 | (2) |
|
|
436 | (1) |
|
|
437 | (18) |
|
An Autonomous SOAP Extension |
|
|
438 | (8) |
|
A Targetable SOAP Extension |
|
|
446 | (6) |
|
Changing the SOAP Message Using Your Extension |
|
|
452 | (2) |
|
SOAP Extensions on the Client |
|
|
454 | (1) |
|
|
455 | (2) |
|
|
457 | (36) |
|
|
458 | (1) |
|
Authentication in ASP.NET |
|
|
458 | (14) |
|
|
459 | (6) |
|
|
465 | (7) |
|
|
472 | (5) |
|
|
472 | (2) |
|
|
474 | (3) |
|
Controlling Access to Services |
|
|
477 | (1) |
|
|
477 | (11) |
|
|
478 | (1) |
|
|
479 | (9) |
|
|
488 | (5) |
|
Part III Enhancing the Web Services Framework |
|
|
|
The Global XML Web Services Architecture |
|
|
493 | (30) |
|
GXA Specifications in WSE |
|
|
495 | (18) |
|
|
495 | (4) |
|
|
499 | (7) |
|
|
506 | (1) |
|
WS-Routing and WS-Referral |
|
|
507 | (6) |
|
|
513 | (8) |
|
|
513 | (1) |
|
|
514 | (1) |
|
|
515 | (1) |
|
|
515 | (2) |
|
|
517 | (1) |
|
|
518 | (2) |
|
|
520 | (1) |
|
|
521 | (2) |
|
|
523 | (34) |
|
Downloading and Installing WSE |
|
|
523 | (1) |
|
|
524 | (9) |
|
|
524 | (5) |
|
|
529 | (3) |
|
|
532 | (1) |
|
|
533 | (2) |
|
Individual Configuration Options |
|
|
535 | (1) |
|
Controlling the Filters in the Pipeline |
|
|
535 | (4) |
|
Adding Filters in the Configuration Files |
|
|
538 | (1) |
|
Recommended Filter Configuration |
|
|
539 | (1) |
|
|
539 | (2) |
|
|
541 | (5) |
|
|
544 | (2) |
|
|
546 | (4) |
|
|
550 | (5) |
|
|
550 | (1) |
|
|
551 | (1) |
|
|
552 | (1) |
|
Custom Filters on the Client |
|
|
553 | (2) |
|
|
555 | (2) |
|
|
557 | (24) |
|
|
558 | (1) |
|
|
559 | (1) |
|
|
560 | (1) |
|
The Destination Web Services |
|
|
560 | (1) |
|
Server-Controlled Routing |
|
|
561 | (7) |
|
|
561 | (1) |
|
|
561 | (2) |
|
|
563 | (2) |
|
|
565 | (1) |
|
|
566 | (1) |
|
Multiple Routers on the Same Server |
|
|
567 | (1) |
|
|
568 | (5) |
|
Building the Custom Router |
|
|
569 | (2) |
|
Creating the Web Services |
|
|
571 | (1) |
|
|
572 | (1) |
|
|
572 | (1) |
|
|
573 | (1) |
|
Client-Controlled Routing |
|
|
573 | (4) |
|
|
573 | (1) |
|
|
573 | (1) |
|
|
574 | (1) |
|
|
574 | (2) |
|
|
576 | (1) |
|
|
577 | (1) |
|
|
578 | (1) |
|
|
579 | (2) |
|
|
581 | (36) |
|
|
581 | (1) |
|
Username and Password Security |
|
|
582 | (1) |
|
X509 Certificate Security |
|
|
583 | (6) |
|
Generating Test X509 Certificates |
|
|
584 | (4) |
|
Importing X509 Certificates |
|
|
588 | (1) |
|
Getting Real X509 Certificates |
|
|
588 | (1) |
|
Using Other Security Credentials |
|
|
589 | (1) |
|
|
589 | (2) |
|
|
591 | (9) |
|
|
592 | (4) |
|
|
596 | (3) |
|
|
599 | (1) |
|
Message Signing and Encrypting |
|
|
600 | (6) |
|
|
600 | (1) |
|
|
601 | (2) |
|
|
603 | (3) |
|
|
606 | (5) |
|
|
607 | (1) |
|
|
608 | (1) |
|
|
609 | (2) |
|
Signing and Encrypting Parts of the Message |
|
|
611 | (5) |
|
Signing Parts of the Message |
|
|
611 | (1) |
|
Encrypting Parts of the Message |
|
|
612 | (1) |
|
|
613 | (1) |
|
|
614 | (2) |
|
|
616 | (1) |
|
|
617 | (20) |
|
|
617 | (12) |
|
|
618 | (7) |
|
The Extended Architecture |
|
|
625 | (4) |
|
The March Toward Interoperability |
|
|
629 | (5) |
|
|
630 | (4) |
|
|
634 | (3) |
|
|
|
|
637 | (20) |
|
|
637 | (1) |
|
|
638 | (6) |
|
|
638 | (2) |
|
|
640 | (4) |
|
|
644 | (4) |
|
|
648 | (6) |
|
|
649 | (1) |
|
|
650 | (4) |
|
|
654 | (3) |
|
|
657 | (10) |
|
Standards and Standards Bodies |
|
|
657 | (1) |
|
|
658 | (1) |
|
Sites Referenced in the Book |
|
|
659 | (8) |
|
|
659 | (1) |
|
|
659 | (1) |
|
|
660 | (1) |
|
|
660 | (1) |
|
|
660 | (1) |
|
|
661 | (1) |
|
|
661 | (1) |
|
|
661 | (1) |
|
|
662 | (1) |
|
|
662 | (1) |
|
|
662 | (1) |
|
|
662 | (1) |
|
|
663 | (1) |
|
|
663 | (1) |
|
|
663 | (1) |
|
|
663 | (1) |
|
|
663 | (4) |
|
|
667 | (8) |
Index |
|
675 | |