Küçük bir proje için Biztalk Server ile çalışmam, Biztalk Server üzerinde “Suspend” olarak takılmış mesajları görüntüleyip bunları tekrar “Resume” etmem gerekti. Bütün bu işleri Biztal Server’ın Administration arayüzleri ile yapabiliyoruz tabi ki ama proje kapsamı bunları farklı bir uygulamadan yönetebilmekti. WMI kullanarak, kısaca nasıl Biztalk üzerinde bu tür işlemlerin yapabileceğimizi paylaşmaya çalışacağım. Biztalk ve WMI ile ilgili tecrübesi olmayanlar için pek bir şey ifade etmeyecektir belki ama çok fazla Türkçe kaynak bulunmadığından bu konu ile ilgili paylaşmak istedim…O zaman hemen başlıyalım. (:
Öncelikle çok basit konsol uygulaması olacak yapacağımız şey örnek olması adına. WMI arayüzünden, ulaşabileceğimiz özellikler için .NET Framework içerisinde ki System.Management namespace’inden ManagementScope, ObjectQuery ve ManagementObjectSearcher sınıflarını kullanıyor olacağız.
ManagementScope sınıfı için, WMI’da hangi arayüze bağlanacağımızı belirttiğimiz yönetim kapsamını belirleyen sınıf diyebiliriz. WMI’da, Biztalk ile ilgili yönetimsel özeliklere bağlanıyor olduğumuzu bu sınıf ile belirtiyoruz.
ObjectQuery ile WMI üzerindeki sorgularımızı tanımlıyoruz. WQL diye adlandırılan, T-SQL’e benzeyen bu sorgularımız sonucunda ki bilgilere göre işlemlerimizi gerçekleştireceğiz.
ManagementObjectSearcher sınıfı ile de, oluşturduğumuz WQL sorgularını çalıştırabiliyoruz. Çalıştırdığımız sorgular bize WMI üzerinden, belirtmiş olduğumuz namespace’ler üzerindeki bilgileri getiriyor olacaktır.
Aşağıdaki kod örneğinde Biztalk’un namespace’ine bağlanıp, “Suspend” olmuş mesajları alıyoruz.
ManagementScope scope = new ManagementScope(@"\\192.168.111.75\root\MicrosoftBizTalkServer"); scope.Connect(); ObjectQuery query = new ObjectQuery("SELECT * FROM MSBTS_MessageInstance WHERE ServiceInstanceStatus=4 "); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); ManagementObjectCollection queryCollection = searcher.Get();
searcher nesnesinin Get() metodu ile ManagementObject tipinde elemanları olan bir koleksiyon alıyoruz. Bu koleksiyon içerisinde WMI’ya yapmış olduğumuz sorgunun sonuçları, yani Biztalk’da “Suspend”de kalmış mesajları alıyor olacağız. ManagementObject tipindeki elemanlar üzerinden, Biztalk’da ki mesajların bilgilerine ulaşabiliriz. Ancak .NET Framework’ün ve Visual Studio’nun sağladığı bazı avantajları kullanarak, biraz daha OOP yaklaşımında, Biztalk mesajlarının nesnelerini oluşturup, işlerimizi kolaylaştırabiliyoruz.
Visual Studio‘da bildiğiniz üzere, Server Explorer diye alt bir pencere mevcut. Belirtmiş olduğumuz bilgisayara bağlanıp çeşitli özelliklere ve bilgilere ulaşabiliyoruz. WMI üzerindeki “class”lar da bunlardan biri. Eklemiş olduğumuz bilgisayarın bu WMI namespace’lerinde ki sınıflarına , “Management Classes” altındaki elemanlardan ulaşabiliriz.