Web Services Authenticated SOAP Postings
ASP.NET Web Services
A Web Service is programmable application logic accessible via standard Web protocols.
- Goals of ASP.NET Web services:
- To enable cross-platform, cross-business computing
- Great for “service” based operations that have few methods:
- Google searches
- Amazon integration, etc.
- ASP.NET Web services are “method-oriented”, not object-oriented
- Everything is passed by value: no references to server objects
- Usually uses SOAP over HTTP POST – platform independent messages
- Hosted in IIS - Can use built-in authentication and encryption via IIS
- Technically stateless, but can use regular ASP.NET Session variables
- Very easy to use, with good support in Visual Studio.NET
- Doesn’t support: Events / call backs and Object references
Standards-Based
- SOAP (Simple Object Access Protocol)
- XML-based protocol for messaging
- WSDL (Web Service Description Language)
- Document describing the message exchange contract
- DISCO (Discovery)
- Simple protocol for publishing available services
- UDDI (Universal Description Discovery and Integration)
- Yellow pages directory for services
SOAP
Simple Object Access Protocol
- XML based protocol to exchange structured and typed information
- Remote Procedure Calls (RPC)
- Serialization Rules (XSD)
- Extensible
UDDI
Universal Description, Discovery and Integration
- A project to speed interoperability and adoption for web services
- Standards-based specifications for service description and discovery
- Shared operation of a business registry on the web
- Partnership among industry and business leaders
- Open process with clear roadmap to a standards body
WSDL
Web Service Definition Language
- An XML-based grammar for describing the capabilities of Web Services
- Extensible
- Jointly developed by Microsoft and IBM
- Similar in concept to IDL, but it’s not IDL
- To parse WSDL you need XML parser
Overview of XML Web Service Architectures

XML Web Services Mapping
The .NET Framework provides a bi-directional mapping

Simple Example
<%@ WebService Language="C#" Class="HelloWorld" %>
using System;
using System.Web.Services;
public class HelloWorld : WebService {
[WebMethod]
public String SayHelloWorld() {
return "Hello World";
}
}
SOAP
- Simple Object Access Protocol
- XML-based standard that defines how method calls can be made over HTTP, and how the server’s response should be formatted
- You need to know it because
- in certain circumstances where you might want to use SOAP to exchange special “meta” information along with each method call
SOAP Elements
- Envelope (mandatory)
- Top element of the XML document representing the message
- Header (optional)
- Determines how a recipient of a SOAP message should process the message
- Adds features to the SOAP message such as authentication, transaction management, message routes, etc…
- Body (mandatory)
- Exchanges information intended for the recipient of the message.
- Typical use is for RPC calls and error reporting.
POST /HelloWorld/Hello.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/Add"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope …>
<soap:Header>
<AuthHeader xmlns="http://tempuri.org/">
<Username>avi</Username>
<Password>xM76w@</Password>
</AuthHeader>
</soap:Header>
<soap:Body>
<Add xmlns="http://tempuri.org/">
<a>23</a>
<b>44</b>
</Add>
</soap:Body>
</soap:Envelope>
SOAP Fault
- Used to carry error and/or status information within a SOAP message
- Appears within the SOAP body
- Defines the following:
- faultcode (mandatory)
- Faultstring (mandatory)
- faultactor (optional)
- Detail
SOAP Fault Example
<SOAP:Fault><faultcode>SOAP:Server</faultcode>
<faultstring>Internal Application Error</faultstring>
<detail xmlns:f=“http://www.a.com/CalculatorFault”>
<f:errorCode>794634</f:errorCode<f:errorMsg>Divide by ro</f:errorMsg></detail>><SOAP:Fault>
Soap Extensions
Creation
- Create a class derived from SoapExtension
- Create a class derived from SoapExtensionAttribute
- Overload the constructor if necessary
- Define any custom properties
- Overload the ‘ExtensionType’ property to return the type of your derived SoapExtension class
Uses
- Apply the attribute to a web method or web service class
- Used for More Advanced Functionality
- Intercept Calls to a Web Service
- Intercept Calls to a Web Method
- Pre and Post Processing
- Tracing
- Encryption
- Compression