|
|||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
IntroductionAccess the GAL (Global Address List) information from a web application, is it possible? Obviously, yes! There are few articles available on the web which list different methods to do so. Let us see one of the methods in detail. BackgroundOccasionally, there would be some requirement to access the Microsoft Exchange properties from a web application. Accessing the Global Address List is one among them. There are three different ways to achieve the Outlook contacts from within a .NET web application. This article describes all the three in brief. For my case, using WebDAV suited best. The WebDAV method of accessing will return only the details of the contacts available in the logged-in user's contact list, and not from the GAL. After Googling, I found an article discussing about the OWA way of finding GAL entries. The OWA has a command called http://YourCompanyExchangeServer/public/?Cmd=galfind&fn=rajga
This request will give the response containing all the GAL entries having the first name "rajga". This article describes all the possible search parameters. In this article, I tried to combine both the approaches, and provided an elaborate solution written in C# .NET. Using the codeGAL entries can be queried using the Hence, to make this request valid, we need to attach a valid authentication cookie along with the request. The code below shows an example of sending the string ResponseString = string.Empty;
string Server = "YourServerName";
string NetworkUserName = "YourValidUserName";
string NetworkUserPassword = "YourValidPassword";
string NetworkUserDomain = "YourValidDomain";
NetworkCredential _oNetworkCredential =
new NetworkCredential(NetworkUserName,
NetworkUserPassword, NetworkUserDomain);
CookieCollection _oCookieCollection =
GetOWAAuthCookies(Server, _oNetworkCredential);
/* Check for the First Name */
string uri = string.Format("{0}/Public/?Cmd=galFind&fn={1}",
Server, "rajga");
HttpWebRequest _oHttpWebRequest =
HttpWebRequest.Create(uri) as HttpWebRequest;
_oHttpWebRequest.Credentials = _oNetworkCredential;
_oHttpWebRequest.CookieContainer = new CookieContainer();
_oHttpWebRequest.CookieContainer.Add(_oCookieCollection);
_oHttpWebRequest.UserAgent = "Mozilla/4.0(compatible;MSIE 6.0; " +
"Windows NT 5.1; SV1; .NET CLR 1.1.4322; " +
".NET CLR 2.0.50727; InfoPath.1)";
using (HttpWebResponse _oHttpWebResponse =
_oHttpWebRequest.GetResponse() as HttpWebResponse)
{
StreamReader _oStreamReader =
new StreamReader(_oHttpWebResponse.GetResponseStream());
ResponseString = _oStreamReader.ReadToEnd();
_oStreamReader.Close();
_oHttpWebResponse.Close();
}
Response.Write(ResponseString);
The code in bold is used to get the authentication cookie. This method uses the WebDAV sample shown in this article to call owaauth.dll to get the authentication cookie. The method is shown below: private CookieCollection GetOWAAuthCookies(string server, NetworkCredential credentials)
{
string authURI = string.Format("{0}/exchweb/bin/auth/owaauth.dll",
server, credentials.UserName);
byte[] bytes =
Encoding.UTF8.GetBytes(string.Format("destination={0}/exchange/" +
"{1}&username={2}\\{1}&password={3}",
server, credentials.UserName, credentials.Domain,
credentials.Password));
HttpWebRequest request = WebRequest.Create(authURI) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencode";
request.CookieContainer = new CookieContainer();
request.ContentLength = bytes.Length;
request.AllowAutoRedirect = false;
using (Stream requestStream = request.GetRequestStream())
requestStream.Write(bytes, 0, bytes.Length);
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
CookieCollection _oCookieCollection = response.Cookies;
response.Close();
return _oCookieCollection;
}
}
Executing this code will return the GAL entries matching the first name; the same can be implemented for last name, display name, and alias name as well. Points of interestInitially, in my
|
||||||||||||||||||||||||||||||||||||||||