Our Accomplishments - Mahesh's brain droppings

Download Report

Transcript Our Accomplishments - Mahesh's brain droppings

Slide 1 Mahesh Krishnan, Senior Consultant, Readify

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

Slide 5 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 6

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

WCF: How does it work?

WCF End points

Slide 9 WCF Endpoints

Every service has

A

ddress

Where the service is

B

inding

How to talk to the service

C

ontract

What the service can do

The EndPoint Anology

Slide 10 Address Binding Contract

Address

 Combination of transport, server name, port & path  Transport is determined by the binding  Examples http://localhost:8001 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 } {

[ServiceContract]

public interface IService

[OperationContract]

string GetData(int value); { public class ConcreteService : IService public string GetData(int value) { ... } } public string OtherMethod() { ... } Slide 15

Data Contracts

  [DataContract] – Specifies type as a data contract [DataMember] – Members that are part of contract [DataContract] public class CustomType { [DataMember] public bool MyFlag { get; set; } [DataMember] public string MyString { get; set; } } Slide 16

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

Slide 21 Demonstration

Slide 22

Passing data around

 To pass data across boundaries, they need to be serialized  .NET Framework already contains an attribute for serialization } {

[Serializable]

public class Person public string LastName; public string FirstName; Slide 23

Passing data around

Serializable

limitations – Attribute has some  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

[DataContract(Name="Contact")] public class Person { [DataMember(IsRequired=true, Name="SurName")] public string LastName; } public string FirstName; //Not included in contract Slide 26

Slide 27

Versioning of data contracts

Three different scenarios:

 New fields have been added  Existing fields have been deleted  Fields have been renamed

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

} [DataContract] public class MyDataContract {

: IExtensibleDataObject public ExtensionDataObject ExtensionData { get; set; }

Slide 30

Inheritance with Data Contracts

[DataContract] public class Employee { ... } [DataContract] public class Manager : Employee { ... } } { [ServiceContract] public interface IEmployeeService [OperationContract] public void AddEmployee(Employee e); Slide 31

Inheritance with Data Contracts

[DataContract]

[KnownType(typeof(Manager))]

public class Employee { ... } [DataContract] public class Manager : Employee { ... } } [ServiceContract] { public interface IEmployeeService [OperationContract] public void AddEmployee(Employee e); Slide 32

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 } { [ServiceContract] public interface IEmployeeService [OperationContract]

[FaultContract(typeof(ValidationException))]

public void AddEmployee(Employee e); Slide 36

Server side code

 Always throw Exceptions as Fault Exceptions { public class EmployeeService public void AddEmployee(Employee e) { ...

throw new FaultException (new ValidationException(errorMsg));

} } Slide 37

Client side code

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...

}

Slide 38

Exceptions while developing

behaviorConfiguration = "Debugging"

> ...

Slide 39

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

operation information specify Service and

DataContracts

and

DataMembers

data that is passed across the wire are used for specifying the Use

KnownType

attribute for specifying class hierarchy information in Data contracts

FaultContracts

specify what Exceptions may be thrown by the operations

Slide 42