Goal
To create a WCF REST(Representational State Transfer) service. The main goal is to show it in the most simplest way.
Follow the below given steps
- Open Visual Studio 2010.
- File >> New Project >> WCF >> WCF Service Application. I named it SimpleWCFService.
- I removed the default "IService1.cs" and "Service1.svc". Added a new "Sample.svc". This will automatically create an interface in file "ISample.cs". The structure will look like the image given below.
ISample.cs
#region System
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Web;
#endregion
namespace SimpleWCFService
{
[ServiceContract]
public interface ISample
{
/// <summary>
/// The parameters are passed in URL expression.
/// </summary>
/// <param name="Param1"></param>
/// <param name="Param2"></param>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = "SampleCheck/{Param1}/{Param2}")]
string SampleCheckUrl(string Param1, string Param2);
/// <summary>
/// The parameters are passed as QueryString.
/// </summary>
/// <param name="Param1">{Param1}</param>
/// <param name="Param2">{Param2}</param>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = "SampleCheck?Param1={Param1}&Param2={Param2}")]
string SampleCheckQueryString(string Param1, string Param2);
}
}
Sample.svc.cs
#region System
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Web.Script.Serialization;
#endregion
namespace SimpleWCFService
{
/// <summary>
/// Simple Class
/// </summary>
[DataContract]
public class SimpleClass
{
[DataMember]
public string CParam1 { get; set; }
[DataMember]
public string CParam2 { get; set; }
[DataMember]
public string CMessage { get; set; }
}
/// <summary>
/// The simplest way to use a WCF REST(Representational State Transfer) service
/// </summary>
public class Sample : ISample
{
/// <summary>
/// The parameters are passed in URL expression.
/// </summary>
/// <param name="Param1"></param>
/// <param name="Param2"></param>
/// <returns></returns>
public string SampleCheckUrl(string Param1, string Param2)
{
JavaScriptSerializer _jScript = new JavaScriptSerializer();
SimpleClass _simple = new SimpleClass()
{
CParam1 = Param1,
CParam2 = Param2,
CMessage = "Success with SampleCheckUrl(int Param1, string Param2)!"
};
return _jScript.Serialize(_simple);
}
/// <summary>
/// The parameters are passed as QueryString.
/// </summary>
/// <param name="Param1"></param>
/// <param name="Param2"></param>
/// <returns></returns>
public string SampleCheckQueryString(string Param1, string Param2)
{
JavaScriptSerializer _jScript = new JavaScriptSerializer();
SimpleClass _simple = new SimpleClass()
{
CParam1 = Param1,
CParam2 = Param2,
CMessage = "Success with SampleCheckQueryString(int Param1, string Param2)!"
};
return _jScript.Serialize(_simple);
}
}
}
Web.config - MOST IMPORTANT
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleWCFServiceBC">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="restBehaviour">
<webHttp automaticFormatSelectionEnabled="true" helpEnabled="true"/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="RestBinding" />
</webHttpBinding>
<basicHttpBinding>
</basicHttpBinding>
</bindings>
<services>
<service name="SimpleWCFService.Sample" behaviorConfiguration="SimpleWCFServiceBC">
<endpoint address="" binding="basicHttpBinding" contract="SimpleWCFService.ISample"></endpoint>
<endpoint address="rest" binding="webHttpBinding" behaviorConfiguration="restBehaviour" bindingConfiguration="RestBinding" contract="SimpleWCFService.ISample"></endpoint>
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Checking REST Service - URL FORMAT
Navigate to the below given url(
Note:Replace the port number.).
"http://{LOCALHOST:PORTNUMBER}/Sample.svc/rest/SampleCheck/Args1/Args2".
This should give the result in below given format.
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"CParam1":"Args1","CParam2":"Args2","CMessage":"Success with SampleCheckUrl(int Param1, string Param2)!"}</string>
Checking REST Service - QueryString
Navigate to the below given url(
Note:Replace the port number.).
"http://{LOCALHOST:PORTNUMBER/Sample.svc/rest/SampleCheck?Param1=Args1&Param2=Args2".
This should give the result in below given format.
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">{"CParam1":"Args1","CParam2":"Args2","CMessage":"Success with SampleCheckQueryString(int Param1, string Param2)!"}</string>
I spent a lot of time trying to figure this out so writing this up for the ones who just want solutions. Let me know if this helped.