Bir e-postayı okumak (otomatik olarak) ne kadar zor olabilir?

Womanne

Member
Günlük tasarım çalışmalarımızdan bir kez daha kısa bir kesit…

Duyuru



Müşterilerimizden biri düzenli olarak harici ortaklardan e-posta ekleri aracılığıyla veri alıyor. Bu e-postalar otomatik olarak paketten çıkarılmalı ve bir Microsoft SQL Server 2005 veritabanına aktarılmalıdır.Prensip olarak, bir Exchange Sunucusundan mesajları almak ve ekli dosyaları açmak, .NET olarak İşbirliği Veri Nesnelerini (CDO) temel alan birkaç satırlık kodla uygulanabilir. tabanlı konsol uygulaması (örneğe bakın). CDO bir COM bileşeni (cdo.dll) olmasına rağmen, .NET tarafından Runtime Callable Wrapper (RCW) aracılığıyla kullanılabilir. Ancak bunu SSIS içinde kullanmak zorludur.

SQL Server Entegrasyon Hizmetleri (SSIS), Microsoft SQL Server 2005 ile birlikte gönderilen bir dışa aktarma, dönüştürme ve yükleme (ETL) sunucusu ürünüdür. Windows Workflow Foundation’da (WF) olduğu gibi Microsoft, önceden oluşturulmuş bir modül (Görev/Öğe) sağlamaz. /Görev) e-posta koleksiyonu için.

Prensip olarak, SSIS’de Visual Basic .NET kodunu (ancak C# kodunu veya diğer .NET dillerini değil) kullanabileceğiniz “Komut Dosyası Görevleri” adı verilen bir yapıya sahip olduğundan yukarıda SSIS’de bahsedilen konsol uygulama program kodunu kullanabilirsiniz. Visual Studio 2005’in sadeleştirilmiş bir sürümü olan SQL Server Business Intelligence Development Studio’nun yardımıyla.

Ancak ayrıntılı olarak çeşitli zorluklar vardır:

  • SSIS yalnızca Genel Derleme Önbelleğindeki (GAC) derlemeleri kullanabilir. CDO için RCW, öncelikle GAC’a dahil edilecek bir dijital imzanın (“güçlü ad”) olmasını gerektirir. Visual Studio bunu yapmadığından bir komut satırı komutuna ihtiyacınız vardır:
    TlbImp.exe cdo.dll /birincil /keyfile:itvisions_demo_key.snk /out:Interop.mapi.dll
    Daha sonra oluşturulan RCW derlemesini (interop.mapi.dll) GAC’ye eklemek için gacutil.exe’yi kullanabilirsiniz.
  • Ancak SQL Server Business Intelligence Development Studio’daki derleme referansı iletişim kutusu, derlemeyi GAC’de bulamıyor. Bu nedenle dizinde ek olarak derlemenin bir kopyasına sahip olmanız gerekir. %windir%Microsoft.netframeworkv2.0.50727 yere koy.
  • Komut Dosyası Görevinden CDO bileşenine başarıyla başvurduktan ve Visual Basic .NET kodunu ilettikten sonra, Konsol uygulaması aynı bilgisayarda düzgün çalışsa bile Komut Dosyası Görevi, COM bileşeninin örneğini oluşturmayı inatla reddetmeye devam edecektir. Bunun nedeni COM ve SSIS/.NET’in farklı iş parçacığı modelleridir. ASP.NET bunun için aspcompat = “true” ayarına sahiptir. SSIS’te bunun karşılığı yoktur. Geriye kalan tek seçenek, açıkça bir STA iş parçacığı olarak başlatılan SSIS komut dosyası görevinde CDO bileşeni erişim kodunu ayrı bir iş parçacığında başlatmaktır:
    Yeni konu olarak karart(New ThreadStart(AddressOf EMailEvaluateFunction))
    t.ApartmentState = ApartmanDevlet.STA
    t.Başlat()
    t.Kayıt Ol()
  • Çözüm daha sonra SQL Server Business Intelligence Development Studio’da yerel olarak başlatıldığında ve SQL Server Management Studio’da çalıştırıldığında, oturum açmış kullanıcı Exchange Server’da oturum açmaya uygun bir MAPI profiline sahip olduğu sürece çalışır.
  • Ancak bir sonraki zorluk, SSIS paketini SQL Server Agent’ta normal bir görev olarak çalıştırmaktır. SQL Server’daki işler genellikle SQL Server Agents sistem hizmet hesabı altında çalışır. Bu, varsayılan olarak Windows sistem hesabı olmasına rağmen, bunun için bir MAPI profili yoktur. Bu nedenle, öncelikle aracının çalışan hesabı olarak kullanılacak başka bir Windows kullanıcı hesabını (bir MAPI profili aracılığıyla Exchange Server’a erişimi olan) yapılandırmanız gerekir. Bu işlem aşağıdaki makalede anlatılmaktadır.
  • Outlook yüklüyse, Microsoft Outlook veya Denetim Masası’ndaki Posta uygulaması aracılığıyla bir MAPI profili oluşturabilirsiniz. Outlook yüklü değilse CDO’yu ayrıca yüklemeniz gerekir. Bu arada, CDO’daki Session nesnesinin Logon() yöntemi belirtilen profili bulamazsa, mevcut bir profili seçmenizi veya yeni bir profil oluşturmanızı isteyen bir iletişim kutusu görüntülenir. Bu nedenle öncelikle söz konusu kullanıcı sunucuya bağlandığında çözümü test etmek önemlidir.
  • Oluşturulan RCW derlemesinin, cdo.dll dosyasının ve CDO tarafından kullanılan tüm DLL’lerin sürüm numarası açısından birbiriyle eşleşmesi de önemlidir. SSIS, CDO bileşenini kullanmayı reddetmeye devam ettiğinde (“ActiveX bileşeni nesne oluşturamıyor”), tavsiyemiz Outlook’un sunucuda kaldırılmasına ve bağımsız CDO kurulumunun denenmesine yardımcı oldu.
Talep üzerine çözümü test ettiğimiz SSIS paketini size göndermekten memnuniyet duyarım. Lütfen iletişim formumu kullanarak iletişime geçin.

BTW: Microsoft, bir Bilgi Bankası makalesinde CDO’nun .NET’te hiç desteklenmediğini açıklıyor. Ancak bu, bunun yapılamayacağı anlamına gelmez; yalnızca zorluklar için Microsoft’a başvuramayacağınız anlamına gelir. Bu deneyimleri burada belgelemek için bir neden daha. Henüz internette bununla ilgili bir bilgi olmamasına şaşırdım. Sonuçta bir e-postayı SSIS sürecinde değerlendirmek o kadar da absürt bir senaryo değil!


()



Haberin Sonu
 
Üst