Share via


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

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 the WCF project, therefore we need to do have some workaround to achieve this.

Step by Step guide to create a custom SharePoint REST service

Create an Empty SharePoint Project by selecting as Farm Solution

http://lh6.ggpht.com/-E-q2WOhCJwU/U1eezmr4XVI/AAAAAAAACig/_1GNkB-jUz0/image_thumb3.png?imgmax=800

Then right-click the Project and Add ->** SharePoint Mapped Folder** -> select ISAPI and click OK

http://lh3.ggpht.com/-vQny37Pqsag/U1ee0wiUrFI/AAAAAAAACiw/TKm7yflhSbE/image_thumb6.png?imgmax=800

Then create a subfolder under ISAPI that is used to deploy our service.

http://lh6.ggpht.com/-lKnqyPB0euw/U1ee2NGqQXI/AAAAAAAACjA/fX3zFwuKcHE/image_thumb8.png?imgmax=800

Now we need to create WCF service and its interface. Therefore add two classes named ServiceApiToken.cs and IServiceApiToken.cs.

using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;namespace ApiToken{ [ServiceContract] public interface IServiceApiToken { [OperationContract] [WebGet(ResponseFormat = WebMessageFormat.Json)] string GetResponse(); }};
using System;using System.Net;using System.Runtime.Serialization.Json;using System.Text;namespace ApiToken{ [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class ServiceApiToken : IServiceApiToken { public string GetResponse() { return "Executed"; } }}

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 example, you can open visual studio command prompt and use sn -T and DLL path to find the public key token.

http://lh5.ggpht.com/-5VbKvdvJJ34/U1ee3swHvUI/AAAAAAAACjQ/E1R4Hzodjf0/image_thumb%25255B17%25255D.png?imgmax=800

Finally, we need to add service endpoints and web.config

http://lh6.ggpht.com/-_V-8aLABjwk/U1ee5MKSByI/AAAAAAAACjc/TLNbbWU7lXA/image_thumb%25255B16%25255D.png?imgmax=800

You cannot find svc template in SharePoint Project Template. thus you need to add txt file and rename as a svc. In this case it was renamed as a token.svc.

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

<%@ Assembly Name="ApiToken, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fe8eeb150d52c287"%>
<%@ ServiceHost Service="ApiToken.ServiceApiToken" %>

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

<configuration>
 <system.serviceModel>
 <behaviors>
 <serviceBehaviors>
 <behavior>
 <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
 <serviceDebug includeExceptionDetailInFaults="false" />
 </behavior>
 </serviceBehaviors>
 <endpointBehaviors>
 <behavior name="customApiToken">
 <webHttp/>
 </behavior>
 </endpointBehaviors>
 </behaviors>
 <services>
 <service name="ApiToken.ServiceApiToken" >
 <endpoint address="" behaviorConfiguration="customApiToken" binding="webHttpBinding" contract="ApiToken.IServiceApiToken">
 <identity>
 <dns value="localhost" />
 </identity>
 </endpoint>
 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
 </service>
 </services>
 </system.serviceModel>
 </configuration>
 

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