Introduction
This article describes the format of WebDAV (Web Distributed Authoring and Versioning) request, and how it can be used to query a SharePoint Portal Server (SPPS) index.
Background
The SharePoint Portal Server uses the Microsoft Index Server to index various documents so that they can be made searchable. An index enables easier search of a document. The SPPS indexes various documents based on the various attributes of the document and its content, e.g., the document type (*.doc), and some keywords used within the content of the document.
A WebDAV request can be used to talk to an index created by SharePoint, and retrieve all the matching documents based on the keywords provided as a search criteria.
Using the code
Step-by-step approach of "How to send a WebDAV request to the SharePoint Portal Server (SPPS)".
- Create a SharePoint Portal server workspace. Please refer to the SharePoint documentation for the meaning of a workspace.
- Create a web request instance...
HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(workspaceUrl);
The reference variable httpWebRequest
now holds the instance HttpWebRequest
object.
httpWebRequest.ProtocolVersion = HttpVersion.Version10;
httpWebRequest.ContentType = "text/xml";
httpWebRequest.Method = "SEARCH";
WebHeaderCollection whc = new WebHeaderCollection();
whc.Add("MS-SEARCH-MAXROWS", maxRows);
whc.Add("MS-Search-UseContentIndex","t");
whc.Add("MS-Search-TotalHits","t");
httpWebRequest.Headers = whc;
The code snippet listed above is fairly self explanatory. Let me quickly guide you through it. The protocol version is being set in the first line, followed by the content type and the METHOD
verb. The keys in the code MS-SEARCH-MAXROWS
is reserved and used by the SharePoint portal server to send extra information.
byte[] queryData = Encoding.UTF8.GetBytes(webDavRequest);
httpWebRequest.ContentLength = queryData.Length;
NetworkCredential nwkCredential =
new NetworkCredential(
ConfigurationSettings.AppSettings["SPPSUserName"],
ConfigurationSettings.AppSettings["SPPSPassword"],
ConfigurationSettings.AppSettings["SPPSDomain"]);
httpWebRequest.Credentials = nwkCredential;
In the above code snippet, we are encoding a WebDAV Request using UTF-8 standard and storing it into a byte array. The content length is then set using the byte-array's Length
property. The network credentials are then picked up from the web.config file appsettings
section.
Stream requestStream = httpWebRequest.GetRequestStream();
requestStream.Write(queryData, 0, queryData.Length);
requestStream.Close();
httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
In the above code snippet, we are sending the web request using the method httpWebRequest.GetRequestStream()
. The requestStream
is then closed. We retrieve the HTTP web response using the method httpWebRequest.GetResponse()
.
string contentRange = httpWebResponse.Headers["Content-Range"];
responseStream = httpWebResponse.GetResponseStream();
StreamReader readerRespStream =
new StreamReader(responseStream, Encoding.UTF8);
string responseStreamData = readerRespStream.ReadToEnd();
readerRespStream.Close();
The Content-Range
header is the most important and vital header in the SharePoint Portal Server. The format of the Content-Range header is described below:
- Content-Range: rows 0-63; total=64: This means that there are a total of 64 rows required, starting from 0th to the 63rd row.
- Content-Range: rows 0--1; total=0: There is no result in this case. This actually means 0th to -1st row. The '-1' will be become 0--1.
- The next step is to get the response stream, extract it to a
string
object, and then close the response stream.
Points of interest
That's all there is to know how to send a WebDAV request to a SharePoint portal server. There is a lot more to know about how to create a WebDAV query, this will be discussed in my next article.