here - Scott Reed

fortnecessityusefulΛογισμικό & κατασκευή λογ/κού

14 Δεκ 2013 (πριν από 4 χρόνια και 17 μέρες)

103 εμφανίσεις

WCF Intro

Scott Reed

Owner
-

Brain Hz Software

scott@brainhzsoftware.com

Instructor


DevelopMentor

scottr@develop.com


Agenda


Why WCF?


Architecture


Programmatic client and service


Moving to configuration


Sharing contracts


Summary

Before WCF

Technology

Pros

Cons

Sockets

Flexible

Code

everything

RPC

Imperative

request/reply

Simplistic,

s
ynchronous

DCOM

Trxs, Security

Complex,

hard to debug/maintain

.NET Remoting

Easy, configurable,

extensible

No interoperability

ASMX Web Services

Easy, interoperable

Simplistic, Security=SSL

only

WSE 2.0/3.0

Added

message security

Not as easy
,
Verbose, still lacking

MSMQ

Async,

solves availability

Explicit message passing

Clearly not an enabling technology, instead it is unifying

WCF Design goal


Design goal:


To be the best way to get any two pieces of
software to communicate under any
circumstances



To achieve this had to abstract communication


Services are programs that exchange messages


Lower layer sends messages through channels

Messages


Packaged data


Abstraction of a SOAP message


Xml
InfoSet

not actually XML


Created using factory method


Message.CreateMessage


Channels


Channel transmit those messages


Channels together form a stack


Protocol channels can be layered on top


Provide services like reliability and security


Encoder changes Message to byte[]


Transport channel actually sends the bytes

Channel Stack

óöu»
×
{ÊêCÌã³û¢Ì
\
ÓÒÐ(02

Encoder

Transport
Channel

Protocol

Protocol

Encoder

Transport
Channel

Protocol

Protocol

óöu»
×
{ÊêCÌã³û¢Ì
\
ÓÒÐ(02

Programming in the Channel Layer








Explicit message passing like in sockets or MSMQ


What happened to easy?

void ChannelListen()

{


IChannelListener<IReplyChannel> listener = GetListener();


listener.Open();




while (listener.WaitForChannel())


{


IReplyChannel channel = listener.AcceptChannel();


channel.Open();




RequestContext request = channel.ReceiveRequest();


Message reply = HandleMessage(request.RequestMessage);




request.Reply(reply);


request.Close(); channel.Close();



}

}

Service Model Layer


Sits on top of Channel Layer and hides it


Allows method invocation of strongly typed
parameters


Uses serialization to translate objects into
messages


The Big Picture

protocol

protocol

encoder

transport

protocol

protocol

encoder

transport

serializer

serializer

proxy

dispatcher

service
object

Service Model

Layer

Channel Layer

Endpoint


Clients talk to endpoints, and services expose
endpoints


Address


Binding


Contract

B

C

A

B

C

A

B

C

A

B

C

A

B

C

A

Client

Service

Service

WCF in all its glory

Business Partner

Customer

basicHttpBinding

(
compatibility
)

netNamedPipeBinding

(
local
, fast)

Browser

Hosting


Need something to listen for incoming
connections (a host)


WCF is host independent (by default)



Self host (Console, NT Service, Forms/WPF App)


Use the
ServiceHost

class (Open and Close)


IIS/WAS hosted


Use a .svc file (just like ASMX)


WCF provided host for testing
*


WcfServiceHost

Step by step


Define the contract


Implement the contract


Host the service


Expose endpoints


Optionally expose metadata

Demo


Writing a programmatic client and a service

Configuration


Why do it in
config
?


So you don’t have to recompile



Everything you do in code can be done in
config

(almost)

Demo (revisited)


Changing to a
config

file

Sharing contracts


Both the client and the service need to know
the types and methods listed in the contract



There are two ways to accomplish this:


Share types (ala Remoting)


Share schema (ala ASMX)

Demo (revisited again)


Exposing metadata (base and explicit)


Generating a proxy

Summary


WCF unifies communications technology


Architected in two layers:


C
hannel layer and Service Model layer


Endpoints are ABCs


Two ways to share contract (type and schema)