Sameer gaikwad Web Service vs. WCF Service mesameergaikwad

 Sameer Gaikwad CRUD Operation SQL stored procedure mesameergaikwad


This article was originally published on mesameergaikwad as Sameer Gaikwad CRUD Operations Using LINQ to SQL in MVC - mesameergaikwad

Web Service vs. WCF Service



 

1. Web service is there with the .net framework from version 1.0. Whereas, the WCF service got introduced with .NET 3.0.
 
2. ASP.NET Web services send and receive messages by using SOAP over HTTP or HTTPS.
 
WCF services use SOAP by default, but the messages can be in any format, and conveyed by using any transport protocol like HTTP, HTTPS, WS- HTTP, TCP, Named Pipes, MSMQ, P2P(Point to Point), etc.
 
3. Web services have a “.asmx” extension, whereas Wcf services have a “.svc” extension.
 
4. The ASMX page uses the “WebService” directive whereas the svc page uses the “ServiceHost” directive.
 
5. ASP.NET Web services rely on the XmlSerializer in System.XML.Serialization namespace for serialization (to translate data in .NET Framework types to XML and vice versa for transmission to or from a service). XmlSerializer has some limitations like:
  • Only public properties/fields can be serialized.
  • Only collection classes implementing IEnumerable or Icollection can be serialized.
  • Classes that implement IDictionary, such as HashTable cannot be serialized.
  • You can't explicitly indicate which fields or properties are to be serialized into XML and which are to be ignored by the serializer.

ASP.NET WCF services use DataContractSerializer in System.RunTime.Serialization namespace for serialization, which overcomes all the limitations of XmlSerializer mentioned above.

6. To develop a web service using ASP.NET, the [WebService] attribute has to be added to the service class, and the [WebMethod] attribute to the methods that are to be exposed by the service.
  1. [WebService]        
  2. public class MyService    
  3. {        
  4.       [WebMethod]    
  5.      public SumClass SumOfNums(string JsonStr)    
  6.      {    
  7.          var ObjSerializer = new JavaScriptSerializer();    
  8.          var ObjSumClass = ObjSerializer.Deserialize<SumClass>(JsonStr);    
  9.          return new SumClass().GetSumClass(ObjSumClass.First, ObjSumClass.Second);    
  10.      }    
  11. }    
  12.   
  13.  public class SumClass    
  14.  {    
  15.      public int First, Second, Sum;    
  16.   
  17.      public SumClass GetSumClass(int Num1, int Num2)    
  18.      {    
  19.          var ObjSum = new SumClass    
  20.          {    
  21.              Sum = Num1 + Num2,    
  22.          };    
  23.          return ObjSum;    
  24.      }    
  25.  }   
Classes and structures to be exposed should be decorated with [DataContract] attribute and [DataMember] attribute should be added to fields or properties.[ServiceContract] attribute has to be added to the service class.[OperationContract]attribute should be added to the methods exposed by the service.
  1. [ServiceContract]     
  2. blic class MyService : WebService  
  3.  {    
  4.  [OperationContract]  
  5.       public SumClass SumOfNums(string JsonStr)  
  6.       {  
  7.           var ObjSerializer = new JavaScriptSerializer();  
  8.           var ObjSumClass = ObjSerializer.Deserialize<SumClass>(JsonStr);  
  9.           return new SumClass().GetSumClass(ObjSumClass.First, ObjSumClass.Second);  
  10.       }  
  11.  }  
  12.   [DataContract]      
  13.   public class SumClass  
  14.   {  
  15. [DataMember]  
  16.       public int First;  
  17.  [DataMember]  
  18. public int  Second;  
  19. [DataMember]  
  20. public int  Sum;  
  21.   
  22.       public SumClass GetSumClass(int Num1, int Num2)  
  23.       {  
  24.           var ObjSum = new SumClass  
  25.           {  
  26.               Sum = Num1 + Num2,  
  27.           };  
  28.           return ObjSum;  
  29.       }  
  30.   }  
7. ASP.net Web service can be hosted in IIS only.
 
WCF services can be hosted in IIS , WindowsActivation Services(WAS), Managed Windows services or self hosting etc.
 
8. Clients for ASP.NET Web services are generated using a command-line tool named WSDL.exe

WCF uses ServiceModelMetadata Utility tool,svcutil.exe for the same purpose.
 
9. The SOAP header can be customized. For a custom soap header, Create a class with required fields & derive it from SoapHeader to define the structure of the header, and then add the [SoapHeader] Attribute to the method to indicate the presence of a custom header & an instance of the custom SoapHeader class you created like:
  1. namespace MyWebServiceDemo  
  2.     {  
  3.         public class CustomSoapHeader : SoapHeader  
  4.         {  
  5.             public string CustomElement;  
  6.         }      
  7.  [WebService]  
  8.  public class MyService  
  9.  {  
  10.         CustomSoapHeader ObjCustomSoapHeader = new CustomSoapHeader();  
  11.         [WebMethod]  
  12.         [SoapHeader("ObjCustomSoapHeader")]  
  13.         public int SumOfNums(int First, int Second)  
  14.         {  
  15.             return First + Second;  
  16.         }  
  17.      }  
  18.     } 
WCF provides[MessageContract], [MessageHeader] and [MessageBodyMember] attributes to describe the structure of SOAP messages.
  1. [MessageContract]  
  2.  public class CustomHeader  
  3.  {  
  4.      [MessageHeader]  
  5.      public string UserName;  
  6.      [MessageBodyMember]  
  7.      public int Id;  
  8.  } 
10. In ASP.NET Web services, unhandled exceptions are returned to clients as SOAP faults. Instances of the SoapException class can also be thrown. In WCF services, unhandled exceptions are not returned to clients as SOAP faults. FaultContract can be used for exceptions for clients.
  1. [ServiceContract]  
  2. public class FaultDemo  
  3. {  
  4.     [OperationContract]  
  5.     [FaultContract(typeof(FaultClass))]  
  6.     public int Divide(int Dividend, int Divider)  
  7.     {  
  8.         if (Divider == 0)  
  9.         {  
  10.             throw new FaultException<FaultClass>(new FaultClass  
  11.                 {  
  12.                     ExceptionReason = "Divider is 0",  
  13.                     ExceptionDetails = "Divider should be non-zero"  
  14.                 });  
  15.         }  
  16.         return Dividend / Divider;  
  17.     }  
  18.  } 

11. If ASP.NET Web service class is derived from WebService, the WebService base class’ Context property can be used to access the HttpContext object. The application property of the HttpContext object can be used for the application state and its Session property can be used for the session state.

WCF provides extensible objects for state management. ServiceHostBase is used to maintain state that all instances of all services on the same host can access, and InstanceContext maintains state that can be accessed within the same instance of a service.
 
12. Web services don’t support multi-threading. Whereas WCF services Support multi-threading by using ServiceBehaviour class.
 
13. Performance wise web services are slower than WCF service. This is because of the serializers they use.
 
14. The options for securing ASP.NET Web services are the same as those for any IIS application. WCF services also support all these securities provided by IIS and also behavior element of the WCF config can be modified to provide some more security options.

So, WCF service is an advanced technology than Web service. Performance wise WCF is faster than web service. WCF provides more security and supports various protocols & message formats. The only costly area of WCF for developers is its configuration settings. However, this headache was also got solved with WCF4.0 by providing default configuration settings. You can notice up to.NET3.5 visual studio is providing a direct template for web service. From.NET4.0, you will not get any direct template for web service so, you need to create a web application & add a web service to it. 



Post a Comment

0 Comments