SharePoint is a very vast topic to discuss. There are many documents, articles, discussion forums and FAQs available on the internet discussing various aspects of SharePoint. Still, getting consolidated information on some topics seems to be very difficult. The topic discussed here is one among them.
This article is an attempt to list down the limitations (in functionalities) of SharePoint Web Services compared to SharePoint Object Model.
This article is based on the below listed SharePoint versions:
- Windows SharePoint Services 3.0 (WSS 3.0)
- SharePoint Portal Server 2003 (SPS 2003)
- Microsoft Office SharePoint Server 2007 (MOSS 2007)
This document does not discuss the usage of SharePoint Object Model or SharePoint Web Services, but focuses mainly on the limitation of SharePoint Web Services. This article does not discuss the details of SharePoint RPC or FrontPage Extension RPC.
This article expects that you are familiar with:
- The concepts and usage of Web Services in general and related terms like WSDL, SOAP, XML, WebMethod, etc.
- Basic .NET concepts of Assembly, Namespace, Class, etc.
- The samples in the document are in C#, so familiarity with the same will also help to understand the discussed topic better.
- A Brief Introduction
- Performance Overhead of SP Web Service
- Limitation in Retrieving WebApps, SiteCollections
- Finding SharePoint Version
- Issues with Downloading Data
- Limitation in Retrieving Item Level Permissions
What is SharePoint Object Model?
SharePoint Object Model is a .NET-based application programming interface (API) to SharePoint components which can be used to interact with a SharePoint Server. It can be used to communicate with all SharePoint components like Web Applications, Site Collections, Sites, Permissions, Roles, Users, Change Logs, etc.
Applications written using SharePoint Object Model require to be run on the SharePoint Server itself. It is not possible to use it to work remotely with a SharePoint Server. The Object Model is provided purely for server side programming. It can be used to extend the functionalities of the SharePoint server. Some examples are:
- To create some server side tools that lists the Web Applications, Site Collections or all Sites in a SharePoint Farm
- Writing custom web services, etc.
In a SharePoint farm which has more than one server, the application should be run on any of the Web Front End servers, which has the required SharePoint Assemblies (e.g. Microsoft.SharePoint.dll).
What is SharePoint Web Services?
SharePoint provides a set of Web Services that you can use to work remotely with a deployment of SharePoint. It provides methods for Administration, Alerts, Authentication, Copy, Document Work Space, Meetings, etc.
You can also run Web Service client applications on the server, but it will not provide any benefit in terms of performance or functionalities. Other methods or protocols which can be used for remote communication with SharePoint are SharePoint RPC (Remote Procedure Call) and FrontPage Extensions RPC.
In SharePoint 2010, Microsoft introduced a new object model known as Client Object Model, which can also be used to work remotely with SharePoint. Using Client Object Model, you can avoid directly interacting with Web Services.
Please refer to the official documentation on SharePoint Web Services to get the comprehensive list of features offered.
Web Service in general is slow when compared to other binary communication mechanisms like .NET Remoting. Similarly, SharePoint Web Service is also slower if compared with Object Model.
What are the reasons for the slowness?
- Web Services use XML based SOAP (Simple Object Access Protocol) messages as the communication protocol. So every request has a marshalling un-marshalling overhead.
- Every request has to be authenticated using user name and password. It does not support the concept of authenticated session, which can be re-used with a session key. (An exception is ExcelService Web Service in MOSS 2007. It supports sessions when opening an Excel Workbook using
SharePoint Web Service can retrieve the list of Sites (sub sites), Lists and items from a Site collection.
The Webs Web Service can be used to retrieve the Sites and Sub Sites. The access URL of the Web Service is http://<site>/_vti_bin/webs.asmx. It provides the below listed methods to retrieve the Sites and Sub sites.
GetWebCollection: Returns the titles and URLs of all sites directly beneath the current site.
GetAllSubWebCollection: Returns the titles and URLs of all sites within the current site collection
If you want the list of all Site collections or WebApps, there is no way at all using any of the SharePoint Web Services.
Using SharePoint Web Service, it is not possible:
- To retrieve the list of Site Collections from a SharePoint Farm
- To retrieve the list of Web Applications
- To find which is the MySite Host(s)
- To find MySite URLs of all the users
SharePoint Web Services do not provide any direct method to retrieve the version of the SharePoint server. You will have to use the FrontPage extensions RPC to retrieve the server version.
The details of the RPC method can be referred at http://msdn.microsoft.com/en-us/library/ms460198.aspx.
An example usage is:
HttpWebRequest webReq = HttpWebRequest.Create
("http:/<site>/_vti_bin/shtml.dll/_vti_rpc") as HttpWebRequest;
webReq.Method = WebRequestMethods.Http.Post;
webReq.Credentials = new NetWorkCredential(user, passwd, domain);
StreamWriter strWriter = new StreamWriter(webReq.GetRequestStream());
HttpWebResponse WebResponse = webRequest.GetResponse() as HttpWebResponse;
String response = new StreamReader(WebResponse.GetResponseStream()).ReadToEnd();
string response has to be parsed to retrieve the full version information
SharePoint allows its users to upload file(s) into the Server (with or without version control). Users can download the uploaded files programmatically or using a Web browser. SharePoint Web Service provides a Copy Service for the purpose of copying data from the server. The Copy Web Service can be accessed by the URL: http://<servername>/_vti_bin/copy.asmx.
GetItem() method of the Copy service can be used to retrieve a file content from the Server. The syntax of
GetItem() method is:
public uint GetItem (
out FieldInformation Fields,
out byte Stream
The file data is retrieved in the output parameter
Stream. MSDN documentation says “Stream: An array of Bytes, passed as an out parameter that is a base-64 representation of the retrieved document's binary data.”
The overheads here are:
- Marshalling/un-marshalling overhead: The SharePoint Server encodes the binary file data (e.g. Word, Excel file) into text (using Base64 encoding) in order to send it over Web Service. The client application should decode it back to the original encoding for viewing the file. This can affect performance.
- Memory overhead: The
GetItem() method uses a single buffer to retrieve the whole file content. In SharePoint, the maximum allowed size of a single file for upload is 50 MB by default. But this can be configured and the theoretical limit of file size in SharePoint is 2 GB. So having a single buffer to download a file is not practical due to obvious reasons.
The application programmer should use some alternate stream based mechanisms to download files from the SharePoint instead of using the web service (Copy Service). Here is an example of downloading file using .NET
string url = "http://<Site>/Documents/TestDoc.pdf";
string localfileName = @"c:\downloaded files\TestDoc.pdf";
// Create a new WebClient instance.
WebClient myWC = new WebClient();
// Set the credentials
myWC.Credentials = new NetworkCredential(username, password, domain);
// Download the file and save it into the local path.
In SharePoint, permissions of the parent site are inherited to the
List and to items by default. It is also possible to break this inheritance chain of permissions in order to enable unique permissions. Unique permissions can be enabled at
There is a Permissions Web Service (http://<Site>/_vti_bin/Permissions.asmx) that is provided for working with permissions. It provides methods for working with the permissions for a site or list only. It is very much surprising that it does not support managing permissions at item level with Web Services.
Let's look at the
GetPermissionCollection() method. The syntax is:
public XmlNode GetPermissionCollection (
The MSDN says that the parameter
objectType should be either
Web. Other methods in this web service are
UpdatePermission. The support matrix of object type for all the methods in this web service is given below:
||Supported Object Types