First you have to define data contract:
namespace Example
{
[DataContract]
public class Info
{
[DataMember]
public string Title;
[DataMember]
public string Body;
}
}
Then interface of the service - it also defines request and response format as JSON (which can be easily consumed in JavaScript).
namespace Example
{
[ServiceContract(Namespace = "")]
public interface IGetInfoService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
Info GetInfo(int id);
}
}
Service logic just to provide full example :)
namespace Example
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GetInfoService: IGetInfoService
{
public Info GetInfo(int id)
{
return
new Info
{
Title = id.ToString(),
Body = "Lorem ipsum"
});
}
}
}
WCF service requires also web.config section:
<system.serviceModel>
<services>
<service behaviorConfiguration="GetInfoServiceBehavior" name="GetInfoService">
<endpoint address="" behaviorConfiguration="GetInfoEndpointBehavior" binding="webHttpBinding" contract="Example.IGetInfoService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="GetInfoServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="GetInfoEndpointBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Consume service using jQuery $.ajax call.
Params is object that handles all parameters and msg in success function
var params = new Object;
params.id = 10;
$.ajax({
type: "GET",
url: "/Services/GetTheFactsService.svc/GetNextFact",
data: params,
dataType: "json",
success: function (msg) {
$(".info h3").html(msg.d.Title);
$(".info p").html(msg.d.Body);
},
error: function (msg) {
alert(msg);
}
});
If ISS reports 404 or 500 error results you probably need to register WCF:
c: cd "C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation" servicemodelreg -iCommand above registers *.svc handlers for host so if you have other defined for site you have to remove them or go to Handler Mappings section and use Revert To Inherited action.