DemystifyingWindowsCommunicationFoundationx

righteouschangeSoftware and s/w Development

Dec 14, 2013 (3 years and 9 months ago)

112 views

Keith Elder

Microsoft MVP

INETA Speaker

Blog:
http://keithelder.net/blog/

Twitter:
http://twitter.com/keithelder

Podcast:
http://deepfriedbytes.com


Demystifying Windows
Communication Foundation

Originally from Ripley, Ms

1.
Raised on a small farm

2.
Yes I have milked a cow, slopped the
chickens and fed the hogs

3.
Home of the 2
nd

largest flea market
in the US


Modelled During the 80's

Quicken Loans

$500! Cash!

About Quicken Loans

Originally founded in 1985 as Rock Financial by Dan Gilbert

Grew to one of the largest independent mortgage banks in
the country

1998 IPO

1999 Launched
Rockloans.Com

1999 Intuit, Inc (makers of TurboTax and Quicken) purchased
Rock Financial.

July 2002 Dan Gilbert purchased Quicken Loans back from
Intuit. Retained Quicken Loans branding and marketing
initiatives.

5000 employees

Largest online retail home loan lender


Deep Fried Bytes is an audio
talk show with a Southern
flavor hosted by
technologists and
developers
Keith Elder

and
Chris Woodruff
. The show
discusses a wide range of
topics including application
development, operating
systems and technology in
general. Anything is fair
game if it plugs into the wall
or takes a battery.

http://deepfriedbytes.com

Agenda

How We Got Here

ASMX
vs

WCF
Throwdown

WCF Contracts

Service

Data

Message

Bindings

Security

Reliability

Declarative

Summary

From Objects to Services

Polymorphism

Encapsulation

Subclassing

Message
-
based

Schema+Contract

Binding via Policy

1980s

2000s

Interface
-
based

Dynamic Loading

Runtime Metadata

1990s

Object
-
Oriented

Service
-
Oriented

Component
-
Based

The Challenge

Radically Simplifying Distributed Application Development

Development of connected systems

remains costly and frustrating

Different programming models for different tasks

Need for security and reliable messaging

Interoperability with applications on other platforms

Productive service
-
oriented programming model needed

Windows Communication
Foundation

Unified framework for

rapidly building

service
-
oriented applications

What Does WCF Replace?

ASMX

WSE

.NET
Remoting

COM+
(Enterprise
Services)

MSMQ

DEMO

OUR CURRENT
ASMX

SERVICES INVESTMENT
VS

WCF

Smart Client

Java Client

Service

User’s Desktop

Open Form

UserControl

UserControl

Event

Event

Event

ASMX Challenge

Current ASMX Web Services

What’s So Different About WCF

UNDERSTANDING WCF
PRINCIPLES

Services and Clients

Client

Service

Message

Message

Endpoints

Client

Service

Message

Endpoint

Endpoint

Endpoint

Address, Binding, Contract

Client

Service

Message

Address

Binding

Contract

(Where)

(How)

(What)

Endpoint

A

B

C

A

B

C

Endpoints

A

B

C

WCF Architecture: Messaging Runtime

Transport

Encoder

Protocol(s)

Transport

Encoder

Protocol(s)

Client

Dispatcher

Service

Contract

and

Behaviors

Binding

Address

CONTRACTS

The what

Three Types of Contracts

Service
Contract

Defines
Operations,
Behaviors and

Communication
Shape

What does your
service do

Data
Contract

Defines Schema
and Versioning
Strategies

What
obect

data is
used

Message
Contract

Allows defining
application
-
specific headers
and unwrapped
body content

Allows control over
the SOAP
structure of
messages

Ways to Talk

One Way:

Datagram
-
style delivery

Request
-
Reply

Immediate Reply on same logical thread

Duplex

Reply “later” and on backchannel (callback
-
style)

Client

Service

One Way

Request
-
Reply

Duplex (Dual)

SERVICE CONTRACTS

What does your service do?

Service Contract

using System.ServiceModel;


[ServiceContract]

public interface ICalculate

{


[OperationContract]


double Add( double a, double b);


[OperationContract]


double Subtract( double a, double b);

}

Service Contract: OneWay

[ServiceContract]

public interface IOneWayCalculator

{


[OperationContract(
IsOneWay=true
)]


void StoreProblem (ComplexProblem p);

}

Service Contract: Duplex
Asymmetric

[ServiceContract(Session=true,


CallbackContract=typeof(ICalculator
Results
)
]

public interface ICalculatorProblems

{


[OperationContract(IsOneWay=true)]


void SolveProblem (ComplexProblem p);

}


public interface ICalculatorResults

{


[OperationContract(IsOneWay=true)]


void Results(ComplexProblem p);

}

DEMO


SERVICE CONTRACT

DATA CONTRACTS

What object data needs to flow back and forth?

Data Contract

[DataContract]

public class ComplexNumber

{


[DataMember]


public double Real = 0.0D;


[DataMember]


public double Imaginary = 0.0D;




public ComplexNumber(double r, double i)


{


this.Real = r;


this.Imaginary = i;


}

}

MESSAGE CONTRACTS

Defines the mapping between the type and a SOAP envelope

Message Contract

[MessageContract]

public class ComplexProblem

{


[MessageHeader]


public string operation;


[MessageBody]


public ComplexNumber n1;


[MessageBody]


public ComplexNumber n2;


[MessageBody]


public ComplexNumber solution;




// Constructors…

}

BINDINGS

Bindings & Binding Elements

Transport







IPC

MSMQ

Custom

TCP

HTTP

Protocol







Encoders







.NET

TX

Custom

Security

Reliability

Binding



HTTP

TX

Security

Reliability

Text

Text

Binary

Custom

Standard Bindings

Binding

Interop

Security

Session

TX

Duplex

BasicHttpBinding

BP 1.1

N, T

N

N

n/a

WSHttpBinding

WS

M
, T, X

N
, T, RS

N
, Yes

n/a

WSDualHttpBinding

WS

M

RS

N
, Yes

Yes

WSFederationBinding

Federation

M

N
, RS

N
, Yes

No

NetTcpBinding

.NET

T
, M

T

,RS

N
, Yes

Yes

NetNamedPipeBinding

.NET

T

T
, N

N
, Yes

Yes

NetPeerTcpBinding

Peer

T

N

N

Yes

NetMsmqBinding

.NET

T
, M, X

N

N
, Yes

No

MsmqIntegrationBinding


MSMQ

T

N

N
, Yes

n/a


N = None | T = Transport | M = Message | B = Both | RS = Reliable Sessions

Bindings & Behaviors: Security

Service

C

B

A

C

B

A

Client

A

B

C

C

B

A

Be

Be

Bindings Insert
Claims in
Messages

Behaviors
Implement
Security Gates

Claims based end
-
to
-
end security

Secure end
-
to
-
end message exchanges

Secure access to resources

Record resource access requests

X509, Username/Password, Kerberos, SAML,
custom credentials

Message security

Confidentiality and integrity

Transport or message level

Access to resources

Authentication and authorization

Feature Overview

Security

DEMO
-

BINDINGS

Bindings & Behaviors: Transactions

Service

C

B

A

C

B

A

Client

A

B

C

C

B

A

Be

Be

Bindings Flow
Transactions

Behaviors
AutoEnlist and
AutoComplete

Service

C

B

A

C

B

A

Client

A

B

C

C

B

A

Bindings provide
Session and
Guarantees

Bindings & Behaviors: Reliable
Sessions

End
-
to
-
end Reliable messaging

In
-
order guarantees

Exactly once guarantees

Transport
-
Independent Sessions

Integration with ASP.NET Sessions in IIS
-
Hosted
compatibility mode

Transactions

Guaranteed atomic success or failure across
services

Feature Overview

Reliability and Transactions

Code vs. Config

Defining Endpoints

<?xml version="1.0" encoding="utf
-
8" ?>

<configuration xmlns="
http://schemas.microsoft.com/.NetConfiguration/v2.0
">


<system.serviceModel>


<services>


<service serviceType="CalculatorService">


<endpoint address="Calculator"


bindingSectionName="basicProfileBinding"


contractType="ICalculator" />


</service>


</services>


</system.serviceModel>

</configuration>

Configuring Bindings

<endpoint address="Calculator"


bindingSectionName="basicProfileBinding"


bindingConfiguration="Binding1"


contractType="ICalculator" />

<bindings>


<basicProfileBinding>


<binding configurationName="Binding1"


hostnameComparisonMode="StrongWildcard"


transferTimeout="00:10:00"



maxMessageSize="65536"


messageEncoding="Text"


textEncoding="utf
-
8"




</binding>



</basicProfileBinding>

<
/bindings>

Custom Bindings

<bindings>


<customBinding>


<binding configurationName="Binding1">


<reliableSession bufferedMessagesQuota="32"



inactivityTimeout="00:10:00"


maxRetryCount="8"


ordered="true" />


<http
s
Transport manualAddressing="false"


maxMessageSize="65536"



hostnameComparisonMode="StrongWildcard"/>


<textMessageEncoding maxReadPoolSize="64"


maxWritePoolSize="16"


messageVersion="Default"


encoding="utf
-
8" />


</binding>


</customBinding>

</bindings>

DEMO


MULTIPLE BINDINGS

Application

Service Model

Messaging

Hosting

Environments

ASP.NET

WPF

WinForm

NT Service

COM+

TCP

Channel

HTTP

Channel

Queue

Channel

Secure

Channel

Reliable

Channel

Instance

Behavior

Throttling

Behavior

Type Integ.

Behavior

Transaction

Behavior

Concurrency

Behavior

Error

Behavior

Metadata

Behavior

Binary

Encoder

Text/XML

Encoder







WCF Summary

WAS

WCF Summary

WCF is the future of distributed computing

It combines the best of all existing Microsoft
distributed computing stacks

It uses WS
-
* standards for interoperability and .NET
value
-
add for performance and integration with
existing solutions

WCF is available for Windows Vista, Windows XP
SP2, Windows Server 2003, Windows Server 2008