WCF Part 2: Fundamentals.

WCF
WCF @Image courtesy of ddpavumba/ FreeDigitalPhotos.net

WCF Part 2: Fundamentals.

Welcome to CodeSpread!

We have seen the evolution of WCF in our previous article: WCF Part 1: Why WCF?. Next, we will go through the fundamentals of WCF. I will try to make it more worthy than an interview question puff.

What is WCF?

Windows Communication Foundation.Easy. Although, I was not able to find as why it is called a foundation but I was able to relate it to the fact that WCF was the first attempt to bring all the communication protocols and messaging formats under one roof.Refer last article for details. With WCF in hand,No developer have to go anywhere or learn new technology to create a distributed system.

Definition: As per Wikipedia, “Windows Communication Foundation is a runtime and a set of APIs (application programming interface) in the .NET Framework for building connected, service-oriented applications”.

MSDN, “Windows Communication Foundation (WCF) is Microsoft’s unified programming model for building service-oriented applications. It enables developers to build secure, reliable, transacted solutions that integrate across platforms and inter-operate with existing investments.”

Our definition, “ WCF provides a flexible way of developing service oriented applications. Flexibility in terms of communication protocols,message formats, security options, transactions and it covers almost all the existing platforms and also supports older versions to a certain extent”. It means WCF is a one stop solution for a service oriented paradigm.

What is the fundamental knowledge required?

Communication between server and client happens by exchanging messages over a network which must be following a transport protocol.

  • What are these messages?

“A self-contained unit of data that can consist of several parts, including a body and headers.” If you have a xml file or json or any other format which fits into this criteria can be termed as message. These messages are first encoded before being sent. we have following encoding options available.

    • Text encoding : “ Text is translated into numeric values and numeric values are rendered as visible characters. This can happen by using an encoding standard like UTF-8, UTF-16.”
    • Message Transmission Optimization Mechanism (MTOM) encoding: “MTOM is a mechanism for transmitting large binary attachments with SOAP messages as raw bytes, allowing for smaller messages.”
    • Binary encoding: “Binary encoding relies on bits, the smallest unit of encoding.”
  • What is this transport protocol?

  1. HTTP : Hyper text transfer Protocol, a request/response protocol for internet. Browsers can understand HTTP. Easy!
  2. TCP : Transmission Control Protocol,requires dedicated connection between client and the server.
  3. Named Pipes : An object in Windows O/S kernel which facilitates communication between processes on a single machine.
  4. Message Queues : Not exactly a transport protocol, MSMQ is essentially a messaging protocol that allows applications running on separate servers/processes to communicate. There is no condition for the machines to stay connected following this protocol.
  5. Peer Networking mesh: In peer-to-peer (P2P) application  each participant (node) acts as both a client and a server to the other participants in the network and there is no relying on a smaller number of more powerful server computers on the network

We hear a term SOAP, its time to define this term. Simple Object Access Protocol. Although it contains ‘protocol’ but it’s not exactly a transport protocol, it is defined as a XML message sent over HTTP. Simple! A SOAP message is an XML document that has two main sections: the header and the body. What we have mentioned above in messages,encodings and transport protocol sections, all are required to read the body of this SOAP message, but what about the headers?

These headers can be read or write by Protocol channels, For ex: WS-Security and WS-Reliability. First, we will define channels,

Channels:

A channel is a component that operates on messages and message headers.There are two types of channels: transport channels and protocol channels.

  • If we combine one of the above defined encodings with one of the transport protocol then this combination will be called transport protocol. They operate only on the message body.
  • For reading and writing Headers of the message, we have to use one of the protocol channels. WS-Security is an implementation of the WS-Security specification enabling security at the message layer. The WS-Reliable Messaging channel enables the guarantee of message delivery.

Now we know about the message and their transmissions, we will move to the components of WCF required to implement all this.

Flow:

Major components of WCF are ABC.We will concentrate on the flow between client and server machine to identify the components of WCF.

A-Address

Client sends a request to server. How client knows for which program/component of the server, I am sending this request? For this, Address  of component is required. This is the unique location where service will be deployed and can be accessed by the client. How this address looks like?


http:\\localhost:8085\CalculatorService

A WCF Address is normally specified as a URL. This WCF service example uses HTTP as its transport protocol, and it is located on the local server with location path as root. Service Name is CalculatorService.

B-Binding

Now client knows where the service is located, then for transmission of this service from server to client; transport, encoding, and protocol details are required. These details should be agreed upon between server and client before starting the transmission. A combination of these elements will form our binding.

  • basicHttpBinding: This binding supports backward compatibility with ASMX [old web services] based clients. Basic http binding sends SOAP messages and is used when there is a requirement for the WCF services to communicate with non WCF based systems.
  • wsHttpBinding: This binding sends SOAP messages and implements WS* specifications[specifications associated with Web Services] to support enterprise requirements of security, reliability, ordered delivery and transaction management.
  • netTcpBinding:This binding sends SOAP messages, provides binary encoding and optimized communication between WCF services and WCF clients on Windows network.
  • netNamedPipeBinding: This binding is used to provide secure and reliable Named Pipe based communication between WCF services and WCF client on the same machine. It is the ideal choice for communication between processes on the same machine.
  • netPeerTcpBinding: This type of binding exists to cater peer-to-peer computing using WCF services.
  • netMsmqBinding: Microsoft Message Queuing, This type of binding supports MSMQ for transport and asynchronous queued calls.
Table- Combination of encoding and transport protocol for each binding

Table- Combination of encoding and transport protocol for each binding

Additional Bindings: WSDualHttpBinding,WSFederationHttpBinding, WSFederationHttpBinding, MsmqIntegrationBinding.

Developers can use built-in bindings plus they can tweak and configure as per the requirements or can try and write their own custom bindings. WCF gives full freedom to developers in terms of customization.

C-Contract

So far,we have discussed, where our service is located and what all communication criteria are available to begin the transmission. Client places a request to server and ask to begin some process or program , we have earlier told that client will never know the exact implementation of the program but an abstract of it through interface. Here, Interface is the contract which client invokes at the server side.There are several types of WCF contracts, such as Service Contract, Operation Contract, Data Contract, Message Contract, and Fault Contract.In simple terms, Contracts are Interfaces.

  • Service Contract specifies the actual signatures of the service, and is distributed as an interface. This service contract contains several operation contract which declares individual method signatures. Client can call methods of server by invoking service contract interface.
  • Operation Contract is a definition of an operation which defines the parameters and return type of an operation.It has to be implemented before being consumed.

We have an interface file in our service solution, where we need to define the service contract and operation contract.

[ServiceContract()]
public interface IEmployeeService
{
[OperationContract()]
string GetData(string name);
}

There is a class file associated with each interface file of our solution, where we implement this interface

public class EmployeeService: IEmployeeService
{

public string GetData(string name)
{
return “Hi”+ name ;
}

}
  • We already have .Net types like string,int which do not require fine-grained control while sending the message between client and server. These types are easily understood by client and server. But when we create a custom type like Employee, it is observed that without decorating it with additional details, it won’t be understood by client. Here, it has be declared as a data contract, it will provide additional message parameters which describes a message that a service can create or consume.
[DataContract]
public class Employee
{
private int m_id;
private int m_Salary;

[DataMember]
public int ID
{
get { return m_id; }
set { m_id = value; }
}

[DataMember]
public int Salary
{
get { return m_Salary; }
set { m_Salary= value; }
}

}

How this custom type used?


At service side
public Employee GetEmployee(int empId)
{

Employee empDetail =from emp in employeeList where emp.ID=empId select emp;
return empDetail;
}
  • When data contract requires more control over message security ,Then message contract is required which defines specific message parts using SOAP protocols, and allows finer-grained control over parts of the message like header.
[MessageContract]
public class Employee
{
[MessageHeader]
public int EmpID;
[MessageBodyMember]
public string Name;
MessageBodyMember]
public int Salary;
}
  • Fault Contract is similar to our message but it restricts itself to error messages. Client should be warned of any error or fault which happened at the server while executing the program. At this point, fault contract needs to be defined and consumed.

Fault contract is similar to data contract but only the declaration changes like

[ServiceContract()]
public interface IEmployeeService
{
[OperationContract()]
[FaultContract(typeof(<em>some data contract named ‘fault’</em>))]
string GetData(string name);
}

In the implementation class

public class EmployeeService: IEmployeeService
{

public string GetData(string name)
{
try
{
//execute something
}
catch(Exception ex)
{
Fault fault= new Fault (); //Data contract named Fault.
fault.ExceptionMessage = "Error occured.";
fault.InnerException = ex.InnerException;
fault.StackTrace = ex.StackTrace
throw new FaultException(fault, “Fault exception thrown”;
}
}

}

 

There are many custom attributes available to customize the contracts like Name,Serializable which can be used as per the requirements.

EndPoints

We started with basic fundamentals of WCF service and continued our journey by defining all the major items and now is the time to tell that, all these fundamentals explained above can be packed in one term, Endpoints.

We require A B C to configure our service and client, so that transmission can begin between them. It can also be termed as, we require to configure endpoints at server and client to begin transmission. Endpoint is just a term here which encapsulated ABC. The important point is, we have seen above that there are many options available for Addresses , Bindings and Contracts so we can also say that there can be multiple endpoints exposed by server to cater different clients as per their needs.

Endpoints

Endpoints

Metadata

Now we have checked all the configuration part of WCF service but to know all this, what client will have to do? client will use Metadata. The metadata of a service describes the characteristics of the service that client needs to know in order to communicate with the service. Client should have high level understanding what this service does.The metadata includes the information about data contract of the service, methods of the service , types available, security requirements. WCF defines endpoints with the extension of ‘mex’ to expose the metadata to the client.

What we have tried here is to get the users acquainted with some WCF terminologies while trying to avoid most of the complex terms. We have tried to raise the WCF knowledge from the ground up. There are many fundamentals pending but that would be more clear and useful while we develop a WCF application. Next article, we will develop one WCF service and go through the other fundamentals.

Author: hershey

A passion for knowledge drives me to do programming, A passion for programming drives me to create something different, A passion for creation drives me to spread the knowledge.

Share This Post On

0 Comments

  1. nice superb explaination

    Post a Reply
  2. thanks for the tutorial
    I am having a problem.
    The feature “Create SQL server database” isn’t available , I can’t select it.
    Can you help, please ?

    Post a Reply

Submit a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

More from CodeSpread:

  • WCF Part 1: Why WCF?WCF Part 1: Why WCF?When i create a WCF service, i feel like it is a very easy task but when somebody asks me, why you have created it? then the simplest answer is, i got the requirement like this. But to be honest, N...
  • WCF Part 3: Direct from WCF kitchen.WCF Part 3: Direct from WCF kitchen.In the last two articles WCF:Part 1 and WCF Part 2, we have covered basic knowledge and terminologies of WCF.Now we will apply that knowledge to create a WCF service.There are lot of articles avail...
  • Difference Between Transport and Message Security in WCFDifference Between Transport and Message Security in WCFTransport Security in WCF As the name suggests, it is concerned with security of communication between client and the service over a network protocol. It guarantees the confidentiality and integri...
  • REST- REpresentational State TransferREST- REpresentational State TransferREST – REpresentational State Transfer, is an enhanced version of client server style architecture for distributed communication. When we talk about distributed communication, we think of reques...
  • Few lines about WCF metadataFew lines about WCF metadataWhat is WCF metadata? WCF generates metadata for service endpoints and this metadata is used to describe how to interact with the service's endpoints. This information is used by Svcutil.exe to ge...
  • Caching in WCF ServicesCaching in WCF ServicesYes, It is possible and clearly a  significant performance enhancement. How caching works for WCF services? Lets assume, a user sends a request to a service so at server, service method is called...
  • Reusability defined by Microsoft Enterprise LibraryReusability defined by Microsoft Enterprise LibraryWikipedia says “The Microsoft Enterprise Library is a set of tools and programming libraries for the Microsoft .NET Framework. It provides an API to facilitate proven practices in core areas of pro...
  • IIS- Still learning!IIS- Still learning!Whenever we receive some error which is related to IIS, we just jump on internet as we lack the basic concepts of IIS and i can definitely say that we almost ignore IIS and focus ourselves on devel...