Ads

Saturday, 23 March 2013

Code block to create a custom webservice in SharePoint 2010


There are few build in web services available in sharepoint which we generally use. Incase those are not fit for our requirement then we go for creation of our ouwn custom web service like below

Step: 1
Create an asp.net web service project in the visual studio. Name the project as TestServiceProject and rename the Service1.asmx file to TestWebService.asmx. This .asmx file will contain the web methods and the programming logic. Now we can go to the TestWebService.asmx.cs page and define a web method.
Let's say i want to create a web method which will do some operations on the list
[WebMethod]
public string TestMethod(string listName , SPWeb oWeb)
{
//Write the logic for the operation
}
Step: 2
In Solution Explorer, right-click TestWebService.asmx and select View Markup. You will see the following line:
<%@ WebService Language="C#" CodeBehind="Service1.asmx.cs" %>
Change this to:
<%@ WebService Language="C#" %>
Step: 3
Now create a strong key name for the class library project and compile the project
Step: 4
Now host this application in your IIS. Now we need to generate the .disco and the .wsdl files.
To generate the .disco and .wsdl file we need to run the disco.exe command. The disco.exe file will be present at the path "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin”.
Now open the command prompt and run the disco command as:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin > disco http://localhost:5050/TestServiceProject/TestWebService.asmx
Step: 5
Now open both the TestWebService.disco and TestWebService.wsdl file which will be present at "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin" and replace the XML processing instruction
"<?xml version="1.0" encoding="utf-8"?>"
---- with ----
<%@ Page Language="C#" Inherits="System.Web.UI.Page"%>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint.Utilities" %> <%@ Import Namespace="Microsoft.SharePoint" %>
<% Response.ContentType = "text/xml"; %>
Step: 6
In TestWebService.disco file modify the contactref and the soap address tags to:
<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.
HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output=""); %>docRef=<%SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.
OriginalBaseUrl(Request)),Response.Output); %>xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.
OriginalBaseUrl(Request)),Response.Output); %>xmlns:q1="http://tempuri.org" binding="q1:TestWebServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
<soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.
HtmlEncode(SPWeb.OriginalBaseUrl(Request)),
Response.Output); %>xmlns:q2="http://tempuri.org" binding="q2:TestWebServiceSoap12" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
Step: 7
In TestWebService.wsdl file modify the soap:address and soap12:address to:
<soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode
(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />
<soap12:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode
(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />
Now save the two files as TestWebServicedisco.aspx and TestWebServicewsdl.aspx.
Step: 8
Now copy the files TestWebService.asmx, TestWebServicedisco.aspx and TestWebServicewsdl.aspx to the "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI" folder
Step: 9
To include the Web service in the list of web services on the server, open the spdisco.aspx file which is present at "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI" and add the following within the discovery element.
Now save the two files as TestWebServicedisco.aspx and TestWebServicewsdl.aspx.
<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/TestWebService.asmx?wsdl"), Response.Output); %> docRef=
<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/TestWebService.asmx"), Response.Output); %>
xmlns="http://schemas.xmlsoap.org/disco/scl/" />

 
<soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/TestWebService.asmx"), Response.Output); %>
xmlns:q1="http://schemas.microsoft.com/sharepoint/soap/directory/" binding="q1:TestWebServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />
Step: 10
Now deploy the TestServiceProject.dll to GAC and the bin directory of the site on which you want to use the web service. Now you can consume the web service like the out of the box web service provided by SharePoint.

No comments:

Post a Comment

Ads