16 Mart 2010 Salı

Exchange Server 2007 sp1 Sanal Makine


Exchange Web Servisleri ile ilgili çalışmaları yapabileceğiniz sanal makineyi bu adresten indirebilirisiniz.

Microsoft Exchange Server 2007 SP1 VHD


15 Mart 2010 Pazartesi

Sharepoint 2010 Taxonomy Referans Ekleme Sorunu


14\ISAPI altında Microsoft.SharePoint.Taxonomy dll referans olarak projemize eklemek istediğimiz zaman bize aşağıdaki gibi hata mesajı vermekte ve projemizi başarıyla build edememektedir.


Sharepoint 2010 beta ile gelen bu sorunu çözebilmek için önce
C:\Program Files (x86)\Microsoft Chart Controls\Assemblies\System.Web.DataVisualization.dll
referans olarak eklemeli ardından Microsoft.SharePoint.Taxonomy.dll ini projemize referans olarak eklemeliyiz.

Sharepoint Developer blogunda ve technetde de konu ile ilgili soru ve cevaba ulaşabilirsiniz.


Exchange Web Services (EWS) ile kullanıcının maillerini okuma


aşağıdaki kod ile litwareinc.com da hesabı buluna Adil'in
Inbox'ndaki emaillerin başlıklarını listeliyoruz.

private void GetEmails()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};
System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.Url = new Uri("https://domain/ews/exchange.asmx");
service.UseDefaultCredentials = true;
Mailbox mb = new Mailbox("Adil@litwareinc.com");
FolderId fid1 = new FolderId(WellKnownFolderName.Inbox, mb);
FindItemsResults<Item> findResults = service.FindItems(fid1,
new ItemView(int.MaxValue));
foreach (var item in findResults)
Response.Write(item.Subject + "<br />");

}


Exchange Web Services (EWS) ile toplantı odalarını listeleme


Bir önceki yazımda gelen kullanıcının bulunduğu toplantıları listelemiştik. Bu yazımda ise yalnızca kullanıcı ile kısıtlı kalmayarak bütün toplantı odalarını ve dolu olan saatleri listeleyeceğiz. Ben burada ayrı ayrı yazacağım siz kullanacağınız yere göre değiştirir veya bir araya getirsiniz.
İlk önce toplantı odalarının adı ve eposta adreslerini listeyeceğim.
using System.DirectoryServices;
ekledikten sonra toplandı odasının adını ve eposta adresini tutacağım class yazıyoruz.

public class RoomMailbox
{
public string Email { get; set; }
public string DisplayName { get; set; }
}

ardından da örnek kod aşağıda.
private List<RoomMailbox> GetRooms()
{
List<RoomMailbox> listRoomMailbox = new List<RoomMailbox>();
string sqSearchQuery = "(&(&(&(mailNickname=*)(objectcategory=person)(objectclass=user)(msExchRecipientDisplayType=7))))";
SearchResultCollection srSearchResults;
string roRootDSE = "ldap bağlantı adresi";
DirectoryEntry deDirectoryEntry = new DirectoryEntry(roRootDSE);
DirectorySearcher dsDirectorySearcher = new DirectorySearcher(deDirectoryEntry);
dsDirectorySearcher.SearchScope = SearchScope.Subtree;
dsDirectorySearcher.Filter = sqSearchQuery;
dsDirectorySearcher.PropertiesToLoad.Add("mail");
dsDirectorySearcher.PropertiesToLoad.Add("displayName");
srSearchResults = dsDirectorySearcher.FindAll();
foreach (SearchResult srSearchResult in srSearchResults)
{
listRoomMailbox.Add(new RoomMailbox
{
DisplayName = srSearchResult.Properties["displayName"][0].ToString(),
Email = srSearchResult.Properties["mail"][0].ToString()
}
);
}
return listRoomMailbox;
}


msExchRecipientDisplayType=7 toplantı odalarını getirmek için 7 yazdık.
"ldap bağlantı adresi" kısmına ldap adresiniz yazmanız gerekmekte.
Aşadağıda da gelen kullanıcın yetkileri ile Exchange Web Servislerini kullanarak
ilgili toplantı odasının dolu olan saatlerini listeleyelim.
Ben burada örnek olarak 1 adet toplantı odasının(Akdeniz) dolu olan saatlerini getiriyorum.
Ancak siz yukarıdaki kod ile birleştirerek bütün toplantı odalarının dolu olan saatlerini getirebilirsiniz.

Web servisine bağlanabilmemiz tüm sertifika izinleri için gerekli namespaceleri eklemeyi unutmayalım.

using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;


private void GetCalendarByMailBox()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};

System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.UseDefaultCredentials = true;
service.Url = new Uri("https://domain/ews/exchange.asmx");

Mailbox mb = new Mailbox("Akdeniz@litwareinc.com");
FolderId fid1 = new FolderId(WellKnownFolderName.Calendar, mb);
FindItemsResults<Appointment> findResults = service.FindAppointments(fid1,
new CalendarView(DateTime.Now.AddDays(-5), DateTime.Now.AddDays(5)));

foreach (Appointment appointment in findResults)
{
if ((appointment.AppointmentState & 4) != 4)
Response.Write(appointment.Subject + "<br />");
}

}

yukarıdaki kodda bulunan önemli bir nokta da

if ((appointment.AppointmentState & 4) != 4)

kontrolü yapmamızdır. Bu kontrol ile cancel edilmiş toplantı odalarını getirmiyoruz.
Buradaki makalede açıklamasını bulabilirsiniz.

Exchange Web Services (EWS)

Bu yazımda Exchange 2007'de Exchange Web Servisleri ile toplantı odalarını getirme örneği paylaşacağım.

İlk önce burada bulunan Exchange Web Services Managed API indiriyoruz ve %programfiles%\Microsoft\Exchange\Web Services\1.0 klasörü altındaki Microsoft.Exchange.WebServices.dll referans olarak projemize ekliyoruz.
using Microsoft.Exchange.WebServices.Data;
ekledikten sonra aşağıdaki örnek kod ile Exchange 2007 üzerinde bulunan toplantı odalarının ilgili kişi ile ilişkili dolu olan saatlerini gösterebiliriz.

private void GetCalendarByUser()
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

ServicePointManager.ServerCertificateValidationCallback =
delegate(Object obj, X509Certificate certificate,
X509Chain chain, SslPolicyErrors errors)
{
return true;
};

System.Net.WebProxy proxyObject = new System.Net.WebProxy();
proxyObject.Credentials = CredentialCache.DefaultCredentials;
service.Credentials = new WebCredentials("username", "password", "domain");
service.Url = new Uri("https://domain/ews/exchange.asmx");

CalendarFolder myCalendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar);
FindItemsResults myAppointments = myCalendar.FindAppointments(new CalendarView(DateTime.Now.AddDays(-5), DateTime.Now.AddDays(5)));
foreach (Appointment appointment in myAppointments)
Response.Write(appointment.Subject + ", ");
}