The SOAP Story Martin Parry Developer & Platform Group Microsoft Ltd martin.parry@microsoft.com http://martinparry.com
Agenda Definitions SOAP through the ages SOAP and “standards” Approaches to building and using services SOAP Services with WCF Services and the Workflow Foundation
Definitions SOAP WSDL Initially: Simple Object Access Protocol It’s about services that exchange messages The messages are formed from XML Each message has headers plus a body WSDL Describes services and their operations Uses XML and schema to describe messages
SOAP on the Microsoft Platform SOAP Toolkit NT4, Windows 2000 IIS4 or IIS5 Based around COM Used ISAPI filter No longer in mainstream support Extended support expires in March 2008
SOAP on the Microsoft Platform SOAP Toolkit NT4, Windows 2000 IIS4 or IIS5 Based around COM Used ISAPI filter No longer in mainstream support Extended support expires in March 2008
SOAP on the Microsoft Platform SOAP Moniker Introduced in Windows XP Professional Scriptable mechanism for invoking web services Example vbscript... Dim proxy Set proxy = GetObject(“soap:wsdl=http://....”)
SOAP on the Microsoft Platform .NET Remoting Supports TCP and HTTP transports Can use IIS, or not Supports SOAP formatting, or binary Significant difference: - Distributed Object programming paradigm As opposed to message passing
SOAP on the Microsoft Platform ASP.NET .asmx web services “add web reference” Still relies on IIS Support in v2.0 for WS-I Basic Profile No other “standards” support is built-in
SOAP on the Microsoft Platform Web Services Enhancements Now in v3.0 Adds support for some WS-* protocols Allows non-IIS services Allows non-HTTP transport
SOAP on the Microsoft Platform Windows Communication Foundation Introduced in .NET FX 3.0 Entirely new communications API Allows for changes in transports and protocols Very extensible Can use IIS, or not Can use HTTP, or not Ships with named pipes, TCP, MSMQ, P2P
“Standards” WS-Security WS-SecureConversation WS-Policy Message-level security WS-SecureConversation Optimisation for WS-Security WS-Policy Contractual info not contained in WSDL WS-SecurityPolicy Policy rules that are specific to security WS-Trust Defines STS
Approaches – Distributed Objects A long history on the Microsoft platform DCOM, .NET Remoting Difficulty in managing object lifetimes Wisdom of making network transparent? Perhaps the developer needs to know? Simple, OO paradigm – easy to code against
Approaches – Message Exchange Probably still use a proxy class How is message body formed? Serialized object graph, or Application code emits XML content directly SOAP is all about message exchange really Just a question of how this appears to the application developer Different exchange patterns Request/response, one-way, duplex, intermediaries
Approaches - SOA There are multiple definitions of SOA Not necessarily tied to web services A service performs one standalone piece of the business process Participates in message exchange No notion of data + behaviour, as in OO Should use contract + policy so that clients can be built correctly Sometimes see “service brokers”
Location transparency ASMX .NET Remoting Interop with other platforms Extensibility Location transparency Attribute- Based Programming Message- Oriented Programming WS-* Protocol Support Enterprise Services System.Messaging WSE
Distributed Applications “Client” Message (SOAP) Headers: Addressing, Security, etc. Body: Payload “Service” Metadata Message Message Services pass messages described by a contract Service may provide metadata, describing: - The contract The policy applied to communication
Mechanics of Communication “Service” “Client” What do I send? Contract Address Where do I send it? How should I send it? Binding Transport? Encoding? Security?
Mechanics of Communication “Service” “Client” Endpoint Contract Binding Address Endpoint Contract Binding Address Endpoint Contract Binding Address
request metadata (WSDL) Contracts [ServiceContract] public interface INuggetAccess { [OperationContract] string[] GetTopics(); } <definitions> … <portType> <operation name=“GetTopics”> … </portType> </definitions> WSDL svcutil.exe .NET Interface Consumes request metadata (WSDL) Implements “Client” “Service” [ServiceContract] public interface INuggetAccess { [OperationContract] string[] GetTopics(); } public class NuggetAccessService : INuggetAccess { string[] GetTopics() { }
Richness of metadata Service Service can advertise a lot of info to a client WSDL WS-Policy (security etc) Can do so over HTTP WS- MetadataExchange Makes building “clients” a lot simpler Endpoints Contracts
Contract Details Message exchange might be: - Service Data Message [ServiceContract] public interface INuggetAccess { [OperationContract] List<TopicInfo> GetTopics(); } Service [DataContract(Namespace=…)] public class TopicInfo { [DataMember] public int Id } Data [MessageContract] public class TypedMessage { [MessageBody] [MessageHeader] } Message Message exchange might be: - One-way, Request/Response, Two-way (Duplex) WCF also supports serialization models from .NET 2.0 System.Xml.XmlSerialization, System.Runtime.Serialization
Hosting Services ServiceHost is the key class for hosting public class Service : INuggetAccess { string[] GetTopics() { } } IIS MyApp.exe ServiceHost host = new ServiceHost(); host.Open(); <%@ ServiceHost Service=“Service" %> References NuggetAccessService.svc ServiceHost is the key class for hosting Needs manual steps in your host application Automatically done by IIS when provided with a .svc file IIS handles additional transports in v7.0
Windows Communication Foundation
WCF – sketched architecture Client objects XML Service Your code Metadata Your code behaviours behaviours formatting Binding (ordered list of channel types & config) channel type N channel type 2 channel type 1 config channel decoding encoding channel Transport Channel (HTTP, TCP, MSMQ, Pipes, Peer)
Standard Framework Bindings 5/22/2019 Standard Framework Bindings Binding Transactions Reliability Security channels Configuration Transport Pre-built set in the framework WS-I Basic Profile WS-* on HTTP TCP Named Pipes MSMQ Peer Configure/code your own as a "custom" binding 25
Instancing, Concurrency, Sessions 5/22/2019 Instancing, Concurrency, Sessions Service classes can be instantiated: - Singleton, Per-Call, Per-Session, Shareable Service code can be either: - Single threaded, Re-entrant or Multi-threaded Service Message A Singleton Message B Message C Client 26
Instancing, Concurrency, Sessions 5/22/2019 Instancing, Concurrency, Sessions Service classes can be instantiated: - Singleton, Per-Call, Per-Session, Shareable Service code can be either: - Single threaded, Re-entrant or Multi-threaded Service Message A Single Call Message B Single Call Message C Client Single Call 27
Instancing, Concurrency, Sessions 5/22/2019 Instancing, Concurrency, Sessions Service classes can be instantiated: - Singleton, Per-Call, Per-Session, Shareable Service code can be either: - Single threaded, Re-entrant or Multi-threaded Service session Message A Per Session Message B Per Session Message C Client 28
Security in WCF – Out of the box Transport Level HTTPS IIS authentication modes Message Level UserName, X.509 Certificate, Windows IssuedToken – that is, federated security ASP.NET membership and role providers
Security in WCF - Extensibility Roll your own Username validator Token validator Credential types Security Token Service SAML claims Etc...
Federated Security with WCF
WCF in .NET FX 3.5 Most of the new stuff isn’t SOAP We’ll see some of that in the next session Client proxies and partial trust environments Durable services Coming together with Workflow
Partial Trust Now possible to call through WCF proxies in a partial trust environment Various caveats Transport is HTTP only, Security is HTTPS only Encodings is all except MTOM Bindings are BasicHttpBinding, WsHttpBinding, WebHttpBinding* Other limitations No Reliable Messaging, Transactions, Secure Conversation
Durable Services Provider-based framework for easily adding long-running abilities to WCF services Host (e.g. IIS) client initial call serialize and store implementation state response + token token state
Durable Services Provider-based framework for easily adding long-running abilities to WCF services Host (e.g. IIS) client second call + token load and deserialize implementation state token state
Workflow WF is not strictly about services, or SOAP In .NET FX 3.5, WF has some WCF integration A workflow can consume services We can implement a service as a workflow
Services with WF
Summary The Microsoft platform has evolved along with SOAP and its accompanying standards Culminating in WCF The most flexible, extensible communications stack we’ve ever produced
Additional Information MSDN Developer Center for Web Services http://msdn2.microsoft.com/en-gb/webservices/default.aspx “Standards” http://www.w3.org http://www.ws-i.org http://www.oasis-open.org SOA http://www.opengroup.org/projects/soa http://wiki.oasis-open.org/soa-rm WCF http://netfx3.com/content/WCFHome.aspx WF http://netfx3.com/content/WFHome.aspx
MSDN in the UK Visit http://msdn.co.uk Newsletter Events Screencasts Blogs