How to retrieve an object's properties by using the HttpWebRequest class and the HttpWebResponse class in Visual C# (313123)



The information in this article applies to:

  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET (2003)
  • Microsoft Visual C# .NET (2002)
  • Microsoft Exchange 2000 Server

This article was previously published under Q313123

SUMMARY

This article describes how to use the HttpWebRequest class with the PROPFIND method and the HttpWebResponse class from the System.Net namespace to retrieve the properties of an object on Microsoft Exchange 2000 Server in Microsoft Visual C#.

MORE INFORMATION

To retrieve the properties of an object, follow these steps:
  1. Start Microsoft Visual Studio .NET or Microsoft Visual Studio 2005.
  2. On the File menu, point to New, and then click Project.
  3. Under Project Types, select Visual C# Projects.

    Note In Visual Studio 2005, click Visual C# under Project Types.
  4. Under Templates, select Console Application, and then click OK.

    By default, Class1.cs is created in Visual Studio .NET, and the Program.cs file is created in Visual Studio 2005..
  5. In the code window, replace all the code with the following:
    using System;
    using System.Net;
    using System.IO;
                
    namespace WebDavNET
    {
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        class Class1
        {
            static void Main(string[] args)
            {
                try 
                {
                    // TODO: Replace with the URL of an object on Exchange 2000.
                    string sUri = "http://ExchServer/Exchange/UserAlias/Inbox/Test.EML";
    
                    System.Uri myUri = new System.Uri(sUri);
                    HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(myUri);
    
                    string sQuery;
                    sQuery = "<?xml version='1.0'?>" + 
                        "<a:propfind xmlns:a='DAV:' xmlns:m='urn:schemas:mailheader:'>" + 
                        "<a:prop>" + 
                        "<m:subject/>" + 
                        "<a:isfolder/>" + 
                        "<a:displayname/>" + 
                        "<a:href/>" + 
                        "</a:prop>" + 
                        "</a:propfind>";
    
                    // Set credentials.
                    // TODO: Replace with appropriate user credentials.
                    NetworkCredential myCred = new NetworkCredential(@"DomainName\UserName", "UserPassword");
                    CredentialCache myCredentialCache = new CredentialCache();
                    myCredentialCache.Add(myUri, "Basic", myCred);
                    HttpWRequest.Credentials = myCredentialCache;
     
                    //Uncomment the following statement and comment the previous four statements if you 
                    //use Integrated Windows authentication.
                    //httpWRequest.Credentials = CredentialCache.DefaultCredentials
    
                    //Note In Basic type authentication, the user name and password are sent as base64-encoded text, and it is 
                    //easily decoded. Microsoft recommends that you use Basic instead of SSL to help protect the user name and password.
    
    					
    
                    // Set headers.
                    HttpWRequest.KeepAlive = true; //this is the default
                    HttpWRequest.Headers.Set("Pragma", "no-cache");
                    HttpWRequest.Headers.Set("Translate", "f");
                    HttpWRequest.ContentType =  "text/xml";
                    HttpWRequest.ContentLength = sQuery.Length;
    
                    //Set the request timeout to five minutes.
                    HttpWRequest.Timeout = 300000;
                    // set the request method
                    HttpWRequest.Method = "PROPFIND";
    
                    // Store the data in a byte array.
                    byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(sQuery);
                    HttpWRequest.ContentLength = ByteQuery.Length;
                    Stream QueryStream = HttpWRequest.GetRequestStream();
                    // write the data to be posted to the Request Stream
                    QueryStream.Write(ByteQuery,0,ByteQuery.Length);
                    QueryStream.Close();
    
                    // Send the request and get a response. 
                    HttpWebResponse HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse();
    
                    // Get the status code.
                    int iStatCode =  (int)HttpWResponse.StatusCode;
                    string sStatus = iStatCode.ToString();
                    Console.WriteLine("Status Code: {0}", sStatus);
                    // Get the request headers.
                    string sReqHeaders = HttpWRequest.Headers.ToString();
                    Console.WriteLine(sReqHeaders);
    
                    // Read the response stream
                    Stream strm = HttpWResponse.GetResponseStream();
                    StreamReader sr = new StreamReader(strm);
                    string sText = sr.ReadToEnd();
                    Console.WriteLine("Response: {0}", sText);
    
                    // Close the stream.
                    strm.Close();
    
                    // Clean up.
                    myCred = null;
                    myCredentialCache = null;
                    HttpWRequest = null;
                    HttpWResponse = null;
                    QueryStream = null;
                    strm = null;
                    sr = null;
           
                }
                catch (Exception e)
                {
                    Console.WriteLine("{0} Exception caught.", e);
                }
            }
        }
    }
  6. Search for TODO in the code, and then modify the code for your environment.
  7. Press F5 to build and to run the program.
  8. Make sure that the object's properties have been retrieved from the response stream.

Modification Type:MinorLast Reviewed:10/4/2006
Keywords:kbXML kbcode kbMsg kbhowto KB313123 kbAudDeveloper