Click here to Skip to main content
15,881,882 members
Articles / Programming Languages / C++

How to create Custom Web Service WCF (REST) in SharePoint 2013

Rate me:
Please Sign up or sign in to vote.
1.00/5 (1 vote)
23 Apr 2014CPOL1 min read 21.8K   2   2
SharePoint native web services can be access via _vti_bin mapped path.

SharePoint native web services can be access via _vti_bin mapped path. Deploying our custom service to this mapped path enables mapped features such as

But SharePoint Project template does not contain wcf project therefore we need to do have some work around to archive this.

Step by Step guide to create a custom SharePoint REST service

Create a Empty SharePoint Project by Selecting as Farm Solution

image

Then right the Project and Add –> SharePoint Mapped Folder –> select ISAPI and click ok

image

Then create a sub folder under ISAPI that is use to deploy our service.

image

Now we need to create wcf service and it’s interface. therefore add two classes named ServiceApiToken.cs and IServiceApiToken.cs.

using System.Runtime.Serialization;
<!--CRLF-->
using System.ServiceModel;
<!--CRLF-->
using System.ServiceModel.Web;
<!--CRLF-->
 
<!--CRLF-->
namespace ApiToken
<!--CRLF-->
{
<!--CRLF-->
[ServiceContract]
<!--CRLF-->
public interface IServiceApiToken
<!--CRLF-->
{
<!--CRLF-->
[OperationContract]
<!--CRLF-->
[WebGet(ResponseFormat = WebMessageFormat.Json)]
<!--CRLF-->
string GetResponse();
<!--CRLF-->
}
<!--CRLF-->
};
<!--CRLF-->


using System;
<!--CRLF-->
using System.Net;
<!--CRLF-->
using System.Runtime.Serialization.Json;
<!--CRLF-->
using System.Text;
<!--CRLF-->
 
<!--CRLF-->
namespace ApiToken
<!--CRLF-->
{
<!--CRLF-->

<!--CRLF-->
public class ServiceApiToken : IServiceApiToken
<!--CRLF-->
{
<!--CRLF-->
 
<!--CRLF-->
public string GetResponse()
<!--CRLF-->
{
<!--CRLF-->
return "Executed";
<!--CRLF-->
}
<!--CRLF-->
}
<!--CRLF-->
}
<!--CRLF-->

After implementing the Service and Service interface you need to build the project and find the public key of the assembly. (You need to find the fully qualified assembly name)


For an example you can open visual studio command prompt and use sn –T and dll path to find the public key token.


image


finally we need add service end points and web.config


image


you can not find svc template in SharePoint Project Template. thus you need to add txt file and rename as a svc. In my case i renamed it as a token.svc.


Token.svc file you need to specify the Public token you found.



<%@ Assembly Name=<span style="color: #006080">"ApiToken, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fe8eeb150d52c287"</span>%>
<!--CRLF-->
<%@ ServiceHost Service=<span style="color: #006080">"ApiToken.ServiceApiToken"</span> %>
<!--CRLF-->

for web config you need to add txt file and rename it as a web.config



<span style="color: #0000ff"><</span><span style="color: #800000">configuration</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">system.serviceModel</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">behaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">serviceBehaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">behavior</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">serviceMetadata</span> <span style="color: #ff0000">httpGetEnabled</span><span style="color: #0000ff">="true"</span> <span style="color: #ff0000">httpsGetEnabled</span><span style="color: #0000ff">="true"</span> <span style="color: #0000ff">/></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">serviceDebug</span> <span style="color: #ff0000">includeExceptionDetailInFaults</span><span style="color: #0000ff">="false"</span> <span style="color: #0000ff">/></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">behavior</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">serviceBehaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">endpointBehaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">behavior</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="customApiToken"</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">webHttp</span><span style="color: #0000ff">/></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">behavior</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">endpointBehaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">behaviors</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">services</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">service</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="ApiToken.ServiceApiToken"</span> <span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">endpoint</span> <span style="color: #ff0000">address</span><span style="color: #0000ff">=""</span> <span style="color: #ff0000">behaviorConfiguration</span><span style="color: #0000ff">="customApiToken"</span> <span style="color: #ff0000">binding</span><span style="color: #0000ff">="webHttpBinding"</span> <span style="color: #ff0000">contract</span><span style="color: #0000ff">="ApiToken.IServiceApiToken"</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">identity</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">dns</span> <span style="color: #ff0000">value</span><span style="color: #0000ff">="localhost"</span> <span style="color: #0000ff">/></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">identity</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">endpoint</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"><</span><span style="color: #800000">endpoint</span> <span style="color: #ff0000">address</span><span style="color: #0000ff">="mex"</span> <span style="color: #ff0000">binding</span><span style="color: #0000ff">="mexHttpBinding"</span> <span style="color: #ff0000">contract</span><span style="color: #0000ff">="IMetadataExchange"</span> <span style="color: #0000ff">/></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">service</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">services</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">system.serviceModel</span><span style="color: #0000ff">></span>
<!--CRLF-->
<span style="color: #0000ff"></</span><span style="color: #800000">configuration</span><span style="color: #0000ff">></span>
<!--CRLF-->
 
<!--CRLF-->

after you can deploy the solution and access from _vti_bin folder.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Sri Lanka Sri Lanka
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questioncan we create a GetResponse function with parameters in this same example? Pin
Member 1253583120-May-16 4:30
Member 1253583120-May-16 4:30 
GeneralMy vote of 1 Pin
Kannan Karthikeyan8-Dec-14 15:57
Kannan Karthikeyan8-Dec-14 15:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.