Microsoft KB Archive/313127

= How to retrieve the security descriptor of a message by using the HttpWebRequest class and the HttpWebResponse class in Visual C# =

Article ID: 313127

Article Last Modified on 12/11/2006

-

APPLIES TO


 * Microsoft Visual C# 2005 Express Edition
 * Microsoft Visual C# .NET 2003 Standard Edition
 * Microsoft Visual C# .NET 2002 Standard Edition
 * Microsoft Exchange 2000 Server Standard Edition

-



This article was previously published under Q313127



SUMMARY
This article describes how to use Microsoft Visual C# to retrieve the http://schemas.microsoft.com/exchange/security/descriptorproperty of an object in Microsoft Exchange 2000 Server. Specifically, you use the HttpWebRequest class with the PROFIND method and the HttpWebResponse class from the System.Net namespace.



MORE INFORMATION
To retrieve the http://schemas.microsoft.com/exchange/security/descriptor property of an object, follow these steps:  Start Microsoft Visual Studio .NET or Microsoft Visual Studio 2005. On the File menu, point to New, and then click Project. Under Project Types, click Visual C# Projects.

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

In Visual Studio .NET, Class1.cs is created by default. In Visual Studio 2005, Program.cs is created by default.  In the code window, replace the existing code with the following: using System; using System.Net; using System.IO;

namespace WebDavNET { /// /// Summary description for Class1. /// class Class1 { static void Main(string[] args) {  try {   // TODO: Replace with the URL of an object on Exchange 2000. string sUri = &quot;http://ExchServer/Public/MyFolder/Test.EML&quot;;

System.Uri myUri = new System.Uri(sUri); HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(myUri);

string strSDType = &quot;descriptor&quot;; string sQuery; sQuery = &quot;&quot; + &quot;&quot; + &quot;&quot; + &quot; &quot; + &quot;  <r:&quot; + strSDType + &quot;/>&quot; + &quot; &quot; + &quot; &quot;;

// Set credentials. // TODO: Replace with appropriate user credentials. NetworkCredential myCred = new NetworkCredential(@&quot;DomainName\UserName&quot;, &quot;Password&quot;); CredentialCache myCredentialCache = new CredentialCache; myCredentialCache.Add(myUri, &quot;Basic&quot;, 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 are //easily decoded. To help protect the user name and password, we recommend that you //use SSL when you use Basic authentication.

// Set headers. HttpWRequest.KeepAlive = false; HttpWRequest.Headers.Set(&quot;Pragma&quot;, &quot;no-cache&quot;); HttpWRequest.ContentType = &quot;text/xml&quot;; HttpWRequest.Headers.Set(&quot;Translate&quot;, &quot;f&quot;); HttpWRequest.Headers.Set(&quot;Depth&quot;, &quot;0&quot;); HttpWRequest.ContentLength = sQuery.Length;

//Set the request timeout to five minutes. HttpWRequest.Timeout = 300000; // set the request method HttpWRequest.Method = &quot;PROPFIND&quot;;

// 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(&quot;Status Code: {0}&quot;, 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(&quot;Response: {0}&quot;, 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(&quot;{0} Exception caught.&quot;, e); } } } } </li> Search for &quot;TODO&quot; in the code, and then modify the code for your environment.</li> Press F5 to build and to run the program.</li> Make sure that the security descriptor property for the object has been received from the response stream.</li></ol>

Additional query words: HttpWebRequest,HttpWebResponse,System.Net,retrieve,security descriptor,message

Keywords: kbmsg kbxml kbcode kbhowto KB313127

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.