| Introduction | ix |
| 1 Understanding the Basics of XML-Based Web Services | 1 |
| Deciding to Use Web Services | 1 |
| Getting Set Up | 3 |
| Accessing a Web Service | 3 |
| Creating the Application | 4 |
| Adding a Web Reference | 4 |
| Looking on the Surface | 5 |
| Looking Under the Hood | 5 |
| Introducing WSDL | 6 |
| Finding the Proxy Code | 8 |
| Creating the Proxy Code | 9 |
| The Complete Picture | 9 |
| Looking Behind the Scenes | 10 |
| Understanding SOAP | 11 |
| SOAP Messages | 12 |
| The Role of HTTP | 13 |
| Choosing Alternative SOAP Transports | 13 |
| Using Directories to Locate Web Services | 14 |
| Universal Description, Discovery, and Integration | 14 |
| Using UDDI at Run Time | 14 |
| Publishing Web Services | 15 |
| Developing a Web Service | 15 |
| Code Inside a Web Service | 16 |
| Testing the Web Service | 18 |
| DISCO and WSDL Documents | 19 |
| 2 Supporting Remote Access | 23 |
| Defining the Problem | 23 |
| Developing the Customer Correspondence Template | 24 |
| Using Web Services in an Office Application | 26 |
| Using the Generated Class in VBA | 30 |
| Using Complex Data Types | 32 |
| Adding Offline Functionality | 37 |
| Caching the Requested Data on the Client | 37 |
| Testing the Offline Functionality | 43 |
| Caching All the Data on the Client | 45 |
| 3 Integrating Disparate Applications and Systems | 59 |
| Integrating Systems Using SOAP | 59 |
| Providing Additional Data with SOAP Headers | 60 |
| Creating SOAP Headers | 61 |
| Providing Transaction Functionality with SOAP Headers | 64 |
| Examining the Fabrikam Orders Web Service | 65 |
| Implementing the AddOrder method | 66 |
| Implementing the AddItem method | 67 |
| Implementing the CommitTransaction method | 69 |
| Using Transaction Support from the Client | 70 |
| Understanding Header Properties | 73 |
| 4 Developing Electronic Business-to-Business Communication | 75 |
| Understanding Electronic Data Interchange | 75 |
| Making Sense of the Standards | 76 |
| Looking at a Sample Order Response Message | 77 |
| Choosing Between EDI and Web Services | 78 |
| Designing a Business-to-Business Connection with Web Services | 79 |
| Implementing the Delivery Forecast System Using an Object-Based Approach | 80 |
| Testing the Object-Based Forecast Solution | 82 |
| Implementing the Delivery Forecast System Using an XML-Based Approach | 83 |
| Testing the XML-Based Forecast Solution | 85 |
| Comparing the SOAP Messages | 86 |
| 5 Connecting with Customers | 91 |
| Using Web Services to Support Customers | 92 |
| Defining a Web Service Interface to Be Implemented by Others | 93 |
| Examining User Interaction with the Satellite Site | 104 |
| Setting a Web Service URL at Run Time | 107 |
| Supporting Direct Business-to-Customer Relationships | 110 |
| Using the .NET Compact Framework | 111 |
| Implementing the Wine Guide Client | 113 |
| Calling Web Services Asynchronously | 115 |
| 6 Securing Web Services | 119 |
| Understanding Symmetric Key Encryption | 120 |
| Understanding Asymmetric Key Encryption | 120 |
| Using the Symmetric .NET Framework Classes | 122 |
| Generating Symmetric Keys | 126 |
| Using the Asymmetric .NET Framework Classes | 128 |
| Generating Asymmetric Keys | 131 |
| Implementing Authentication and Authorization | 132 |
| Using Windows Authentication | 132 |
| Passing a User Identification and a Password in a SOAP Message | 135 |
| Implementing Privacy | 140 |
| Introducing the SoapExtension Class | 141 |
| Introducing the SoapExtensionAttribute Class | 142 |
| Implementing Privacy in the Satellite Installation Application | 144 |
| Ensuring the Integrity of Data Exchanged | 161 |
| Introducing Hash Algorithms | 161 |
| 7 Monitoring, Scaling, and the Future | 165 |
| Monitoring Your Web Services | 165 |
| Implementing Custom Performance Counters | 166 |
| Writing to the Application Event Log | 171 |
| Implementing Scalable Web Services | 173 |
| Addressing Performance Problems | 174 |
| The Future of Web Services | 176 |
| INDEX | 181 |