Try to get list of folders using webDav
Hi,
I am trying to get a list of foders using webdav. I took the script from the
msdn site.
We use exchange 2003 .
The build of the project succeeded but an error occured on this row :
Response = (HttpWebResponse)Request.GetResponse();
The error mesage is - The remote server returned an error: (404) Not Found.
I thought that the problem is in this url -
string strRootURI = http://mailit.com/exchange/davide/;
but when I try it in the IE , I see my inbox.
1. How can I solve this problem ?
2. I don't know the special exchange sql syntax -
Code BlockstrQuery = "<?xml version=\"1.0\"?><D:searchrequest xmlns:D =
\"DAV:\" >";
strQuery += "<D:sql>SELECT \"DAV:href\" FROM scope('hierarchical traversal
of \"";
strQuery += strRootURI + "\"')</D:sql></D:searchrequest>";
I know the sql server sql syntax but it's different.
Where I can learn about it ?
Thanks,
David
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Xml;
namespace ExchangeSDK.Snippets.CSharp
{
class GettingListOfFoldersWebDAV
{
[STAThread]
static void Main(string[] args)
{
// Variables.
System.Net.HttpWebRequest Request;
System.Net.WebResponse Response;
System.Net.CredentialCache MyCredentialCache;
string strRootURI = http://mailit.com/exchange/davide/;
string strUserName = "a0elbaz";
string strPassword = "123456";
string strDomain = "moia";
string strQuery = "";
byte[] bytes = null;
System.IO.Stream RequestStream = null;
System.IO.Stream ResponseStream = null;
System.Xml.XmlTextReader XmlReader = null;
try
{
// Build the SQL query.
strQuery = "";
strQuery += "SELECT \"DAV:href\" FROM scope('hierarchical traversal of \"";
strQuery += strRootURI + "\"')";
// Create a new CredentialCache object and fill it with the network
// credentials required to access the server.
MyCredentialCache = new System.Net.CredentialCache();
MyCredentialCache.Add(new System.Uri(strRootURI),
"NTLM",
new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
);
// Create the HttpWebRequest object.
Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strRootURI);
// Add the network credentials to the request.
Request.Credentials = MyCredentialCache;
// Specify the method.
Request.Method = "SEARCH";
// Encode the body using UTF-8.
bytes = Encoding.UTF8.GetBytes((string)strQuery);
// Set the content header length. This must be
// done before writing data to the request stream.
Request.ContentLength = bytes.Length;
// Get a reference to the request stream.
RequestStream = Request.GetRequestStream();
// Write the SQL query to the request stream.
RequestStream.Write(bytes, 0, bytes.Length);
// Close the Stream object to release the connection
// for further use.
RequestStream.Close();
// Set the content type header.
Request.ContentType = "text/xml";
// Send the SEARCH method request and get the
// response from the server.
Response = (HttpWebResponse)Request.GetResponse();
// Get the XML response stream.
ResponseStream = Response.GetResponseStream();
// Create the XmlTextReader object from the XML
// response stream.
XmlReader = new XmlTextReader(ResponseStream);
// Read through the XML response, node by node.
while (XmlReader.Read())
{
// Look for the opening DAV:href node. The DAV: namespace is
//typically assigned the a: prefix in the XML response body.
if (XmlReader.Name == "a:href")
{
// Advance the reader to the text node.
XmlReader.Read();
// Display the value of the DAV:href text node.
Console.WriteLine("Value: " + XmlReader.Value);
Console.WriteLine("");
//Advance the reader to the closing DAV:href node.
XmlReader.Read();
}
}
// Clean up.
XmlReader.Close();
ResponseStream.Close();
Response.Close();
}
catch (NotSupportedException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
catch (ProtocolViolationException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
catch (Exception ex)
{
// Catch any exceptions. Any error codes from the SEARCH
// method request on the server will be caught here, also.
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
}
date: Tue, 4 Dec 2007 23:15:00 -0800
author: DavidE