Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 1 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

ADO.NET ile Exchange Server'a Programatik Erişim

14.08.2010 - 19:20 tarihinde aykut gönderdi
Yazan: 
Aykut TAŞDELEN

Exchange Server, hiyerarşik bir veri tabanı olarak organize edilmiştir. Exchange Server 200X, mail haricindeki bilgileri -söz gelimi kurulum bilgileri- tutmak için active directory'i kullanır. Bunun pratik anlamı; Exchange Server 200X 'e active directory'e ilişkin yöntemlerle erişilebiliyor olmasıdır. Ancak bu yöntem, exchange ve active directory kurulumuna zarar verme olasılığı nedeniyle, Microsoft tarafından tavsiye edilmemekte ve alternatif hareket tarzları sunulmaktadır. Bu yöntemlerden hangisinin seçileceği, koşullara bağlı olarak değişmektedir.

  1. Microsoft OLE DB Internet Publishing Provider'ın kullanımı (MSDAIPP) :  
  2. Microsoft OLE DB Exchange Server Provider'ın kullanımı (ExOLEDB):
  3. SQL Server üzerinden "linked server" ortamı kurularak erişim. 


Microsoft OLE DB Exchange Server Provider'ın kullanımı (ExOLEDB)

Bu provider sadece Exchange Server'ın bulunduğu makinede kullanılabilecek (server side) şekilde tasarlanmıştır. Yani ExOLEDB ile sadece lokaldeki exchange'e erişilebilir. Keza bu provider'ın elde edilişi herhangi bir MDAC güncellemesi ile mümkün olmamakta ve ancak Exchange Server kurulumu ile sisteme register edilmektedir.

Ancak bizce ExOLEDB provider'ına ilişkin en önemli sorun; OLE DB 2.5 protokolü ile uyumlu oluşudur. Bunun yarattığı dezavantaj; ExOLEDB 'nin, .NET Framework'teki managed Ole DB provider'ı ile kullanılamamasıdır. Bu noktada çözüm COM Interop yolu ile ADO kullanmaktır.

NOT : Yukarıda söz edilen sorun Exchange Server 2000 'ne ilişkindir. Bildiğiniz gibi "bu makalenin yazıldığı tarih itibari ile" Exchange Server 2003 sürümü çıkmış hatta bir service pack yayınlanmıştır.


Microsoft OLE DB Internet Publishing Provider'ın kullanımı (MSDAIPP)

Bu provider ise -ExOLEDB 'nin aksine- Exchange'in kurulu olmadığı farklı bir makineden, Exchange Server'a erişim için tasarlanmıştır. Yani "client side" bir provider olma özelliğini taşır. 

MSDAIPP provider'ının marjinal faydası; WebDAV isimli protokolü kullanarak IIS sanal dizinlerindeki dokümanlara erişimin sağlanmasıdır. Buna ilaveten MSDAIPP ile Exchange Server 200X 'daki verilere de erişilebilmektedir. Bu noktada transfer için HTTP kullanılacağı için connection string'teki Data Source segmentine uygun bir URL atanmalıdır. Aşağıdaki kod parçasında belirli bir klasördeki tüm verilerin (gizli olanlar da dahil olmak üzere) alınışı örneklenmektedir.

 

 

string sFolder = "";

OleDbConnection cnn = new OleDbConnection();
cnn.ConnectionString = "Provider=MSDAIPP.dso; Data Source=http://exchangeserver/exchange/pruva;
uid=aykut; pwd=deniz6";
cnn.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = cnn;
cmd.CommandType = CommandType.TableDirect;

OleDbDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    for (int i=0; i <= dr.FieldCount-1; ++i)
    {
        sFolder += dr.GetName(i).ToString() + " : " +
        dr.GetString(i) + "\n"; 
    }
    MessageBox.Show(sFolder);
}

 

Kodun önemli kısımlarını irdelemek gerekirse;

Connection string'teki data source segment'inin uygun bir URL ile donatıldığını görmekteyiz. Açıktır ki, sizin kullanacağınız URL bilgisi örnektekinden farklı olmak zorundadır. Ancak örneklenen connection string'teki parçaların ne oldukları bilindiği takdirde, doğru URL bilgisinin yapılandırılması zor olmayacaktır.

- exchangeserver; makine ismidir ve IP numarası ile ikame edilebilir. Ancak web server'ın exchange için dinlediği HTTP taleplerinin, hangi porttan geldiği de belirtilmelidir. Örneğin; http://10.2.9.15:86 örneğinde olduğu gibi.

- exchange; Exchange Server için kullanılmış örnek bir sanal dizin ismidir. 

- pruva; erişilmek istenen mailbox'ın ismidir.

İpucu : Hatta gerekirse örneğin sadece inbox'taki bilgiler için pruva/inbox veya pruva/contacts gibi eklentiler de yapılabilir.

Ayrıca uid ve pwd niteliklerine söz konusu mailbox'a erişim izinlerine sahip kullanıcının isim ve şifresi atanmalıdır.


SQL Server Üzerinden "linked server" Ortamı Kurularak Exchange Server'a Erişim

Şayet erişilmek istenen Exchange Server, SQL Server ile aynı makine üzerinde ise linked server ortamı kurulup (sp_addlinkedserver sistem stored procedure ile) Exchange Server web store üzerinde view'lar yaratmak, sorgulamalar yapmak da mümkündür. 

 


 

Aykut TAŞDELEN

C ve Sistem Programcıları Derneği Eğitmeni

aykuttasdelen@csystem.org

www.aykuttasdelen.net

  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.