Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

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.

Devam…

Nedirtv.com, 6 yaşını bir etkinlik ile kutluyor. 14 Nisan 2012‘de Microsoft’un İstanbul ofisinde gerçekleşecek bu etkinliğin içeriği oldukça güzel konularla dolu. Benim bir küçük bir oturumum olacağı bu etkinliğe, zamanı ve ilgisi olan herkesin katılmasını tavsiye ederim. Etkinlik ile ilgili tüm ayrıntıları ve katılım formu linkini aşağıda bulabilirsiniz.Bu güzel etkinlikte görüşmek üzere…

Geleneksel hale gelen nedirtv?com’un yıldönümü etkinliklerinin altıncısını 14 Nisan 2012 Cumartesi günü saat 10:00 ile 16:00 arasında Microsoft Türkiye İstanbul Ofisinde gerçekleştiriyoruz. Etkinlik ücretsizdir ve kayıt olan herkes katılabilir. Etkinlik programı ve kayıt için gerekli bilgiler aşağıda yer almaktadır.
Program:
10:00 Bankacılık Uygulamaları ve SOA
11:00 SCRUM ile Çevikleşiyoruz
12:00 Windows Phone ve Windows 8
13:00 Herkes için Office 365
13:45 WindowsRT – Bir C# Developerın Perspektifinden Windows Runtime
14:30 Söyleşi

Konuşmacılar
Arda Çetinkaya
Burak Batur
Burak Selim Şenyurt
Ercan Bozkurt
İlkay İlknur
Uğur UMUTLUOÐLU
Etkinlik tarihi: 14 Nisan 2012 Cumartesi

Yer: Microsoft Türkiye İstanbul Ofisi, Bellevue Residence Levent Mahallesi, Aydın Sokak. No:7 Levent İstanbul
Kroki için tıklayın

Kayıt için tıklayın

Katkılarından dolayı Microsoft Türkiye’ye teşekkürlerimizi sunarız.

Microsoft, ASP.NET MVC’ Framework’ünü ilk duyurduğundan beri bu framework’ün kodları herkese açıktı. Ancak dışarıdan geliştirme ve bu ürünün geliştirilmesinde pek bir katkı sağlamak mümkün değildi. Bugünden itibaren, ASP.NET MVC, ASP.NET Web API ve ASP.NET Web Pages(Razor) kodları tamamen açılmış bulunmakta. Yani Microsoft artık(ve hatta ilk defa) kendi ürünleri için dışarıdan gelecek katkıları ürünün geliştirme sürecine dahil etmiş bulunmakta. Bu 3 ürüne, bug’ları çözerek, yeni fonksiyonları check-in’leyerek, unit testler ekleyerek destek sağlayabiliyor olacağız artık.

Tabi ki bu direk ASP.NET artık açık kaynak olarak algılanmamalı, ancak ASP.NET’in bu yukarıdaki 3 ürünü artık tam anlamıyla “open-source” olarak adlandırılabilir. Microsoft, bu 3 ürün için dışarıdan gelecek katkıları tabi ki kendi de kontrol ediyor ve hatta bu ürünleri kendi de geliştirmeye devam edecek.  İlerleyen zaman içerisinde ASP.NET’in belki başka alt ürünleri de bu akımın bir parçası olur.

Bu arada kodları açılan namespace’lerden bazılarını da paylaşim, belki ilginizi daha çok çeker. (:

  • Microsoft.Web.Helpers
  • Microsoft.Web.Http.Data
  • Microsoft.Web.Http.Data.EntityFramework
  • Microsoft.Web.Http.Data.Helpers
  • Microsoft.Web.Mvc
  • Microsoft.Web.WebPages.OAuth
  • System.Json
  • System.Net.Http.Formatting
  • System.Web.Helpers
  • System.Web.Http
  • System.Web.Http.SelfHost
  • System.Web.Http.WebHost
  • System.Web.Mvc
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Administration
  • System.Web.WebPages.Deployment
  • System.Web.WebPages.Razor
  • WebMatrix.Data
  • WebMatrix.WebData

Daha fazla bilgi ve kodlara ulaşmak için http://aspnetwebstack.codeplex.com adresini takip edebilirsiniz.

 

Bu sabah Kaldıraç Etkisi sitesinde( kendisi internet girişimciliği ile ilgili tecrübelerin paylaşıldığı güzel bir platform), yazılım ile ilgili daha doğrusu yazılım ihracatı ile ilgili ilginç ve bir o kadar da keyifli bir yazı ile karşılaştım. Netaş’da AR-GE direktörlüğü yapmış Ali Akurgal‘ın konu hakkında ki ilginç bir tecrübesi…Bu işlerin içinde olan biri olaraktan paylaşmak istedim,buyrun okuyun…

Siz, yazılımın birimi nedir bilir misiniz?

Metre.
Evet metre.
Neden metredir bilir misiniz?

Anlatayım:
1992 yılında, yâni topu topu 20 yıl önce, Netaş’ta ilk yazılım ihracatını gerçekleştirdik. Hazırlanan bir yazılım paketini; tuşa bastık, o zaman internet falan yok, çatıdaki çanak marifeti ile, vallahi de billahi de müthiş bir hız olan 128kb/s ile, İngiltere’ye uydu üzerinden yolladık. Faturayı da pullu posta ile yolladık. 2M$ bankaya geldi, kasaya koyduk.

Aradan 3-4 ay geçti, vergi memurları geldiler. Dediler ki, “siz bir fatura yollamışsınız, 2M$”. “Evet” dedik. “Bu para ödenmiş” dediler. “Evet” dedik. “Ama mal çıkışı yok, bu hayali ihracat” dediler!

Bunun üzerine vergi memurlarını ArGe’ye aldık, bir bilgisayarın başına oturttuk. “Şu ‘enter’ tuşuna basar mısınız” dedik. Biri bastı. Sonra “ne oldu” diye sordu. “300k$’lık ihracat yaptınız, bunun da faturasını yollayacağız, o da ödenecek” dedik. Adam suça ortak olmuş olduğu için çok kötü oldu. Sonra yazılım nasıl yazılır, uydu bağlantısı nedir, bu ne kadar para eder bunları gezdirip gösterip anlattık. Adamlar “çok iyi anladık ama mal çıkışı olması lâzım, mevzuat böyle” dediler.

Bunun üzerine dedik ki: “biz bu yazılımı banda kaydedelim ( o zaman CD yok, hattâ kaset bile yok, ½” makaralı bant kullanılıyor) onu yollayalım”. Adamlar bir çözüm bulmuş olmanın sevinci ile “tamam dediler, kaydedin yollayın”. İhraç ettiğimiz yazılımın kaydı iki makara etti. Bunlar paketlendi ve gümrük komisyoncusuna verildi. Komisyoncu, bunları gümrüğe götürdü ve ihracat işlemine başladı. Gümrük memuru, işlemi yapmış yapmış ve bir noktada sormuş: “TIRlar nerede?”. Komisyoncu da “TIR MIR yok hepsi bu iki zarf” demiş, masanın üzerindeki teyp bantlarını göstermiş. Gümrük memuru “bu iki zarf 2M$ edemez, ben bu işlemi yapamam” demiş, bırakmış.

Mahkemeye gidildi, bilirkişi heyeti kuruldu, bizim o iki makaradaki yazılımın 2M$ edip etmeyeceğini (nasıl baktılarsa?) inceledi. Neyse ki, 2M$ eder dediler de “hayali ihracat”tan kurtulduk. Bu sefer, aynı komisyoncu, aynı gümrük memuruna aynı iki makarayı “2M$ eder mahkeme kararı” ile götürüp işlemi yeniden başlattı. Ancak, gene işlem sırasında, ihraç malının birim fiyatı, miktarı ve toplam fiyatının girilmesi gerekiyor. Mevzuat öyle. Ne yapsınlar, iş daha uzamasın diye bakmışlar zarfta teyp bandı var, bir makarada kaç metre bant vardır diye kestirmişler, makarası 1.000 metreden 2.000 metre yazılım ihraç etmiş olmuşuz.

Yaaa, yazılımın birimi metre. İşte böyle.

Kaynak: http://www.kaldiracetkisi.com/?p=443

Uygulamaların çalışırken neler yaptığını takip edebilmek, hata oluştuğunda bunları kayıt etmek ya da bazı uyarı mesajlarını kayıt altına almak için eminim bir çoğumuz .NET Framework içerisinde bulunan EventLog sınıfından yararlanmıştır. EventLog ile bildiğiniz gibi, Windows’da ki Event Viewer‘a az önce bahsetmiş olduğum tarzdaki bilgileri kayıt altında tutabiliyoruz. Benzer bir şekilde de Event Viewer’da ki kayıtları EventLog sınıfı ile takip de edebiliyoruz.

Basit bir senaryo gereği, Event Viewer’a atılan kayıtları takip etmemiz gerektiğini düşünelim. Ve Event Viewer’a atılan kayıtların belli durumlarına göre belli operasyonlar yapmamız gerektiğini düşünelim. Web servisi çağırmak, başka bir programı tetiklemek, e-mail atmak, belli ayarları değiştirmek falan gibi…

Bunları yapmak EventLog sınıfı ile oldukça basit. Aşağıdaki gibi bir kod parçası içeren bir Windows servisi Event Viewer’a atılan kayıtları takip etmemiz için yeterli olacaktır.


        static void Main(string[] args)
        {
            EventLog sourceEventLog = new EventLog();

            //EventViewer'da hangi Log kayıtlarını izleyeceğimizi
            //Log özelliği ile belirliyoruz.Uygulamamıza ait bir log kaydı daha doğru olacaktır.
            sourceEventLog.Log = "Application";

            //Event Viewer'a bir kayıt atıldığında çalışacak event'imizi tanımlıyoruz.
            sourceEventLog.EntryWritten += new EntryWrittenEventHandler(EntryWritten);

            //EnableRaisingEvents özelliğini true şeklinde belirterek,
            //EntryWritten event'lerinin tetiklenmesini sağlıyoruz.
            sourceEventLog.EnableRaisingEvents = true;

        }

        //Event Viewer'a kayıt atıldığında tetiklenen event'in metodu
        static void EntryWritten(object sender, EntryWrittenEventArgs e)
        {
            //Örnek olarak ATM uygulaması olsun mesela
            if (e.Entry.Source == "ATM Uygulaması")
            {
                switch (e.Entry.EntryType)
                {
                    case EventLogEntryType.Error:
                        //Web servis çağırıp, teknik destek ekibi için case açılabilir.
                        break;
                    case EventLogEntryType.Information:
                        //Para yatırılma işlemi seçildi, sahte para kontrolü yapan uygulamayı
                        //çalıştırabiliriz.Daha sonra kapatabiliriz.
                        break;
                    case EventLogEntryType.Warning:
                        if (e.Entry.EventID==9999)//Para azalıyor mesela
                        {
                            //Para azalıyor şeklinde bir uyarı ile operasyon birimine
                            //para göndermeleri hakkında bilgi gönderilebilir.
                        }
                        break;
                    default:
                        break;
                }

            }
        }

Bu basit yaklaşım, var olan mevcut bir uygulamann Event Viewer’a attığı kayıtlara göre aksiyon alabilmek adına oldukça faydalı olacaktır. Artık geliştirmek,süslemek ihtiyacan göre size kalmış…

,