WCF is a collection of .NET distributed technologies that have existed for
long time, but never got grouped under one roof.
It considered as collection of the following technologies.
- Web Services(ASMX)
- NET Enterprise Services
- MSMQ (Microsoft Messaging Queue)
- .NET Remoting
Code written in WCF can
interact across components, applications and systems and is in accordance with
SOA (Service Oriented Architecture).
Following Sections provide the details of
these ABCs.
Addresses
In WCF, every service has a unique address.
The address provides two important elements- Location of the service
- Transport protocol or transport schema
used to communicate with the service.
The location indicates the name of the
target machine, site, or network; a communication port, pipe, or queue; and
an optional specific path or URI.
WCF supports the following transport schemas:- HTTP
- TCP
- Peer network
- IPC (Inter-Process Communication over
named pipes)
- MSMQ\
Addresses have the following format:
[base address]/[URI]
(Note: URI is optional and can be omitted,
however when it is present it gets merged with the base address to provide
the final address, where the service can be located).
base address format:
[transport]:// [machine or domain][:optional
port]
Following section is meant only to make you
familiar with the various formats that are used with specific type of
transport protocol.
It can be skipped if desired.
Using different available address formats.
TCP Addresses
TCP addresses use
net.tcp
for the transport and generally uses a port:
net.tcp ://{ machine or domain}/ServiceName
e.g. Net.tcp//localhost/PService
(Note: If a port number is not specified, Port
808 is used as default)
HTTP Addresses
HTTP addresses use
http
for transport, and
https can
be used if secure transport is required.
e.g.http://localhost:8001
When the port number is not mentioned, it
defaults to 80.
IPC Addresses
IPC addresses use
net.pipe
for transport.
Note: If a service uses this (i.e. named
pipes, it can accept call only from the same machine).
e.g. net.pipe://localhost/PrPipe
MSMQ Addresses
MSMQ addresses use
net.msmq
for transport
When private queues are used, queue type needs
to be mentioned and is omitted for public queues:
net.msmq://localhost/private/PService (using
private queue)
net.msmq://localhost/PService
(using Public Queue)
Peer Network Address
Peer network addresses use
net.p2p
for transport peer network name, path and port needs to be specified..
There are 9 types of Standard Bindings are
defined for WCF:
Basic Binding
BasicHttpBinding class provides this type of
binding.
It exposes a WCF service as a
legacy ASMX web service
This binding is extremely useful when the intent is to design a WCF service
that should provide backward compatibility with WebServices.
TCP binding
NetTcpBinding class provides this
type of binding.
It uses TCP for cross-machine
communication on the intranet.
It supports a variety of features, including reliability, transactions, and
security, and is optimized for WCF-to-WCF communication.
Restriction: It requires both the client and the service to use WCF.
Peer network binding
NetPeerTcpBinding class provides this type of binding and uses peer
networking as a transport. The peer network-enabled client and services all
subscribe to the same grid and broadcast messages to it.
IPC binding
NetNamedPipeBinding class provides this type of
binding and uses named pipes as a transport for same-machine communication. It
is the most secure binding as it cannot accept calls from outside the machine
and it supports a number of features similar to the TCP binding.
Web Service (WS) binding
WSHttpBinding class provides this type of binding, and uses HTTP or HTTPS
for transport.
Federated WS binding
WSFederationHttpBinding class provides this type of binding, this is a
specialization of the WS binding, offering support for federated security..
Duplex WS binding
WSDualHttpBinding class provides this type of binding .It is similar to the WS
binding except it also supports bidirectional communication from the service to
the client.
MSMQ binding
NetMsmqBinding class provides this type of binding and uses MSMQ for transport
and is suitable for disconnected queued calls.
MSMQ integration binding
MsmqIntegrationBinding class provides this type of binding and converts WCF
messages to and from MSMQ messages.
This is most suitable for usage when Service legacy MSMQ clients
interoperability is critical.
Message Transfer
Patterns
WCF use the following three messaging patterns:
- Simplex,
- Duplex
- Request-Reply.
Simplex communication is commonly referred to as one-way communication.
This approach is used when asynchronous write-only services are required. It
simply means if only one directional (client to Service) communication is
required, use this pattern.
Duplex communication provides true asynchronous two-way communications.
(using callback operations).
In simplex and duplex communication, the consumer is not locked into waiting for
a reply.
Request-Reply: General enough not to provide any details
Defining Bindings is one the most critical stages in WCF Service development.
Correct type of binding can save a lot of time and effort need to build an
effective service.
As an effort to make you comfortable in Service development below is the
checklist that needs to be referred before finalizing bindings for your service.
Interoperability Level:
Make sure if communication will only be in a .NET to .NET scenario, or legacy
ASMX service, or if it is to be used by a consumer that adheres to the WS*
specifications.
Encoding:
Select correct type of encoding, from among Text Message Transmission
Optimization Mechanism (MTOM) Binary.
Transport Protocols
Select from transport options TCP, HTTP, Named Pipe, and MSMQ.
Messaging patterns : simplex, duplex, and request-reply.
Security Considerations: Windows security, WS-Security, Transport level
security.
Transactions and reliable sessions
Contracts:
The contract is a platform-neutral and standard way of describing what the
service does.
WCF defines 4 types of contracts.
- Service contracts
Describe which operations the client can perform on the service.
- Data contracts
Define which data types are passed to and from the service.
- Fault contracts
Define which errors are raised by the service, and how the service handles
and propagates errors to its clients.
- Message contracts
Allow the service to interact directly with messages. Message contracts can
be typed or untyped
Service Type Support
The following are the 3 types of services that can be written with WCF.
- Typed Services: These services use
exact parameterization(passing the required parameters in the correct order,
format and type) when calling a service method and respond with a
well-defined type(as expected by the caller).
- Un-Typed Services: XML is the core
of this type as it is used to transport the input parameters and the
response output is also in XML. These services are the most flexible, but
provide very little value back to the consumer.
- Typed Message Services: A custom
type is defined that will contain the required input parameters and one more
type that will wrap up the output parameters.
This approach is generally known as Request Object / Response Object, since
these are the types of
objects that are result of these types of services.