Mahesh Krishnan, Senior Consultant, Readify Slide 1
Agenda Introduction to WCF What is it? Why use it? Fundamentals and the ABCs of WCF Hosting Tooling Support Passing data around in WCF Handling faults
Slide 3
What is WCF? Stands for Windows Communication Foundation One of the 4 pillars of.NET 3.0 Microsoft’s unified programming model (the service model) for building Service-Oriented Applications
Windows Communication Foundation WCF provides: an SDK for creating SOA a runtime for running Services on Windows Services send and receive messages All messages are SOAP messages WCF takes care of all the plumbing Slide 5
Why use WCF? Interoperable and Standards based Supports WS-* protocols Unified Programming Model Unifies previous models like.NET Remoting, ASMX web services, COM+ etc Productive Programming Model Declarative Imperative Configuration based Slide 6
WCF: How does it work?
WCF End points
Every service has Address Where the service is Binding How to talk to the service Contract What the service can do Slide 9
The EndPoint Anology AddressBindingContract Slide 10
Address Combination of transport, server name, port & path Transport is determined by the binding Examples net.tcp://localhost:8002/MyService net.pipe://localhost/MyPipe net.msmq://localhost/private/MyService net.msmq://localhost/MyService Slide 11
Bindings Transport HTTP TCP MSMQ Message formats and encoding Plain text Binary Message Transmission Optimization Mechanism (MTOM) Communication security No security Transport security Message security Authenticating and authorizing callers Slide 12
Out of the box Bindings BasicHttpBinding WSHttpBinding WS2007HttpBinding WSDualHttpBinding WSFederationHttp Binding WS2007FederationHttp Binding NetTcpBinding NetNamedPipeBinding NetMsmqBinding NetPeerTcpBinding WebHttpBinding MsmqIntegrationBinding Slide 13
Contracts Service contracts Defines operations, communications and behaviours. Data contracts Defines data entities and parameter types. Fault contracts Defines error types Message contracts Defines message formats Slide 14
Service Contracts [ServiceContract] – Defines a ‘set’ of operations [OperationContract] – Defines a single method Slide 15 [ServiceContract] public interface IService { [OperationContract] string GetData(int value); } public class ConcreteService : IService { public string GetData(int value) {... } public string OtherMethod() {... } }
Data Contracts [DataContract] – Specifies type as a data contract [DataMember] – Members that are part of contract Slide 16 [DataContract] public class CustomType { [DataMember] public bool MyFlag { get; set; } [DataMember] public string MyString { get; set; } }
Metadata Exchange Service can also expose endpoint for Metadata Exchange (MEX) It provides a mechanism for clients to find out about: Address of other end points Bindings that are used Contracts used – Service, Operation, Data, etc Slide 17
Hosting IIS HTTP only WAS (Windows Activation Service) Can use any transport Vista and Windows Server 2008 only Self hosting Can use any transport Can be hosted within Console, WinForms, etc Applications Slide 18
Slide 19
Tooling Support Visual Studio Separate projects for WCF “Add Service reference” menu WCF Configuration Editor WCF Service Host WCF Test Tool SvcUtil – To generate proxies SvcTraceViewer – To view logs Slide 20
Demonstration Slide 21
Slide 22
Passing data around To pass data across boundaries, they need to be serialized .NET Framework already contains an attribute for serialization Slide 23 [Serializable] public class Person { public string LastName; public string FirstName; }
Passing data around Serializable Attribute has some limitations – Includes some type information in serialized data – not suited for true SOA Does not support aliases Does not support versioning Does not support ordering Explicit opt-out is needed to leave out some properties that shouldn’t be serialized Slide 24
Alternative – DataContract DataContract: created specifically for WCF to serialize types Attribute contains Name and Namespace properties DataMember is needed to specify which properties/fields will form part of the contract Contains EmitDefaultValue, IsRequired, Name, Order properties Slide 25
DataContract Slide 26 [DataContract(Name="Contact")] public class Person { [DataMember(IsRequired=true, Name="SurName")] public string LastName; public string FirstName; //Not included in contract }
Versioning of data contracts Three different scenarios: New fields have been added Existing fields have been deleted Fields have been renamed Slide 27
Alternate way of looking at it: Older version data [v1] passed to Service accepting newer version of data [v2] Newer version data [v2] passed to Service accepting older version of data [v1] New [v2]-> Old [v1]-> New [v2] Slide 28
New -> Old -> New Slide 29
Proxy code to hold Slide 30 [DataContract] public class MyDataContract : IExtensibleDataObject { public ExtensionDataObject ExtensionData { get; set; }
Inheritance with Data Contracts Slide 31 [DataContract] public class Employee {... } [DataContract] public class Manager : Employee {... } [ServiceContract] public interface IEmployeeService { [OperationContract] public void AddEmployee(Employee e); }
Inheritance with Data Contracts Slide 32 [DataContract] [KnownType(typeof(Manager))] public class Employee {... } [DataContract] public class Manager : Employee {... } [ServiceContract] public interface IEmployeeService { [OperationContract] public void AddEmployee(Employee e); }
Slide 33
SOAP Faults Three main kinds of Exceptions can occur: Communication errors Unexpected error on the service Errors thrown by the service on purpose .NET Exceptions are technology specific All Exceptions come across the wire as SOAP Faults Slide 34
Faults In WCF, SOAP faults are passed in as FaultException objects Rather than throwing Exceptions, services should throw FaultExceptions Or better still FaultException Throwing FaultExceptions will not fault the proxy and the channel Slide 35
FaultContracts Specifies what kind of Exceptions, an operation can throw Slide 36 [ServiceContract] public interface IEmployeeService { [OperationContract] [FaultContract(typeof(ValidationException))] public void AddEmployee(Employee e); }
Server side code Always throw Exceptions as Fault Exceptions Slide 37 public class EmployeeService { public void AddEmployee(Employee e) {... throw new FaultException (new ValidationException(errorMsg)); }
Client side code Slide 38 EmployeeServiceProxy proxy = new EmployeeServiceProxy(); try {... proxy.AddEmployee(emp); } catch(FaultException e) { //Do stuff with exception here } catch(FaultException e) { //Will catch all other types of Fault exceptions... }
Exceptions while developing Slide 39 <service name = "EmployeeService" behaviorConfiguration = "Debugging">... <serviceDebug includeExceptionDetailInFaults = "true"/>
Summary WCF provides a runtime for creating Service Oriented Apps Provides a productive programming model. Takes care of: Messaging and Exchange formats All Plumbing: Transaction, Reliability, Security, etc Supports Declarative (via attributes), Imperative (via code) and Configuration based (via config files) programming model ABCs of Endpoints Address: Where to go? Binding: How to get there? Contract: What to do? Hosting IIS, WAS, Self-hosting
Summary (contd) ServiceContract and OperationContract specify Service and operation information DataContracts and DataMembers are used for specifying the data that is passed across the wire Use KnownType attribute for specifying class hierarchy information in Data contracts FaultContracts specify what Exceptions may be thrown by the operations
Slide 42