Merhaba Linux Ubuntu Desktop

9 Eki

İş dünyasındaki sunucu ortamlarda sürekli haşır neşir olduğum linux işletim sistemi, son yıllarda container ortamların iyice yaygınlaşmasıyla birlikte yol arkadaşım oldu.

Kişisel bilgisayarımda Linux işletim sistemine taşınmak, uzun süredir aklımda olan planlardan biriydi. Bunun en önemli nedeni, bilgisayrımda yaşadığım kaynak yetersizliğiydi. Bu yetersizliğin en önemli nedenlerinden biri de Windows işletim sistemi üzerinde Linux tabanlı araçlarının kurulabilmesi için yüklenen sanallaştırma platformlarıydı. Bir süre sonra windows üzerinde terminali bile linux tabanlı kullanmaya başlamıştım. O halde uzun süredir kullandığım Windows işletim sisteminden Linux ortamında bir desktop dağıtıma geçme vaktinin geldiğine karar verdim. Community desteğinin de geniş olması nedeniyle seçimim Ubuntu desktop oldu.

Linux dünyasına geçmeden önce geliştirme araçlarımın linux desteğini inceledim ve artık geçişi başlatmaya karar verdim. Refus programı ile bir USB kurlum olşuturdum ve yedekteki SSD diskim üzerine kurulumu yaptım.

Windows çok kullanışlı ve alışık olduğum bir işletim sistemi olması nedeniyle, Linux desktopa alışamam bir hafta kadar sürdü. Kurulumlar, dosya sistemi, sürücülerin tanıtılması vs. derken bir hafta sonunda acemiliğimi atmış oldum. Server versiyondan alışık olduğum için bir çok kurulumu terminal ile yapmaya çalıştım.

Performans konusunda gayet memnun kaldım. Windows üzerinde container ortamlarda ayağa kaldırdığım araçları Linux üzerinde kaldırdığımda kaynak kullanımı neredeyse %50 civarında fark ettiğini gördüm. Bilgisayarın rahatlamasıyla bende rahat bir nefes almış oldum.

Sonuç olarak, eğer geliştirme değil de ofis veya ev amaçlı bir desktop işletim sistemi seçecek olursam yine windows tercih ederdim. Ancak yazılım ve mühendislik amaçlı kullanımda Unix tabanlı bir işletim sistemini (Linux veya Mac) tercih ederim.

WSL Ubuntu Versiyon Güncelleme

26 Ağu

WSL üzerinde çalışan ubuntu veya diğer ürünlerin versionunu görüntülemek için aşağıdaki komut kullanılır.

wsl -l -v

 NAME                   STATE           VERSION
 docker-desktop-data    Stopped         2
 Ubuntu-20.04           Running         1
 docker-desktop         Stopped         2 

Ubuntu versionunu 2 yapmak için kullanılacak komut, kurulu olan ubuntu versiyonuna göre aşağıdaki şekilde yapılmaktadır. Örnekteki 20.04 sürümü kurulumunuza göre değişebilir.

wsl --set-version Ubuntu-20.04 2

 Conversion in progress, this may take a few minutes…
 For information on key differences with WSL 2 please visit https://aka.ms/wsl2
 Conversion complete.

İşlem tamamlandıktan sonra yeni version listesi aşağıdaki gibi olacaktır.

wsl -l -v

 NAME                   STATE           VERSION
 docker-desktop-data    Stopped         2
 Ubuntu-20.04           Running         2
 docker-desktop         Stopped         2 

Windows Terminal Kullanımı

14 Ağu

Microsoft, windows 10 ile birlikte yeni bir terminal aracını biz kullanıcıların hizmetine sunmuştur. Windows bünyesinde bulunan ilk komut kullanım aracı Command Prompt’tur. Daha sonra yeni bir komut arayüzü olarak Powershell aracı Windows’a dahil edilmiştir. Fakat bu iki araçta rakip işletim sistemlerinin sunduğu konsol araçlarına göre biraz kulanışsız kalmıştır. Örneğin birden fazla ortamda komut satırı çalıştırmak istediğimiz de çok fazla pencere açmamız gerekmektedir. Ayrıca bu araçlarda tab özelliği bulunmamaktadır.

Mizrosoft firması, bu eksiklikleri kapatan açık kaynak kodlu Windows Terminal aracını geliştirmiştir. Windows terminal aracı hem tab kullanımı ile birden fazla pencereyi tek bir ekranda yönetme imkanı sunar, hemde temalar ile görseli özelleştirilebilen bir özelliğe saiptir. Windows terminal aracı windows store üzerinden indirlebilmektedir.

Windows terminalde birden fazla konsol aracını yukarıda görüldüğü gibi aynı anda açabilmek mümkündür. Her konsol aracı ayrı bir tab da görünür. Yeni tab eklemek için pencerenin üst kısmındaki aşağı ok tuşuna basarak istediğimiz aracı seçebiliriz. Resimde dikkat ederseniz ubuntu konsol aracı da eklenmiştir. Bu aracı windows ortamında kullanabilmek için WSL(Windows Subsystem for Linux) kullanabilirsiniz. Bu araç sayesinde windows üzerinde windows store kullanarak istediğimiz linux sürümünü kurabiliriz.

Windows terminalde görünüm özelleştirilebilmektedir. Bunun için aşağıdaki ayarlar sekmesinden ;

Aşağıda sarı ile işaretli araylar butonuna tıklandığında, varsayılan editör ile terminalin ayarlar dosyası (settings.json) açılır.

Benim bilgisayarımda Visual Studio 2019 olduğu için bu editör ile ayarları yapabiliyorum.

Settings.json dosyasında her terminal için profiles objesindeki list kolleksiyonunda ayarlar bulunur. Terminalin görünüm özelliğini değiştirmek için iki yol vardır.

Birinci yol Color Schemas sayfasından Included color schemas bölümündeki hazır şemalar kullanılabilir.

  • Campbell
  • Campbell Powershell
  • Vintage
  • One Half Dark
  • One Half Light
  • Tango Dark
  • Tango Light

Örneğin Powershell’de One Half Dark şeması için ayarları şu şekilde değiştirip kaydetmek yeterlidir. Görüntü hemen güncellenecektir.

{
      // Make changes here to the powershell.exe profile.
      "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
      "name": "Windows PowerShell",
      "commandline": "powershell.exe",
      "hidden": false,
      "colorScheme": "One Half Dark"
}

İkinci yol ise kendi ayarlarımızı settings.json dosyası içerisindeki schemes dizisine eklmektir. Burada terminal görsellerine ait çok fazla ayar bulabilirsiniz. Örneğin Command Propt için schemas dizisine aşağıdaki gibi bir ayar ekleyelim.

"schemes": [
     {
       "name": "Aurora",
       "black": "#23262e",
       "red": "#f0266f",
       "green": "#8fd46d",
       "yellow": "#ffe66d",
       "blue": "#0321d7",
       "purple": "#ee5d43",
       "cyan": "#03d6b8",
       "white": "#c74ded",
       "brightBlack": "#292e38",
       "brightRed": "#f92672",
       "brightGreen": "#8fd46d",
       "brightYellow": "#ffe66d",
       "brightBlue": "#03d6b8",
       "brightPurple": "#ee5d43",
       "brightCyan": "#03d6b8",
       "brightWhite": "#c74ded",
       "background": "#23262e",
       "foreground": "#ffca28",
       "selectionBackground": "#292e38",
       "cursorColor": "#ee5d43"
     }
   ]

Bu ayarı artık command propt için kullanabiliriz.

{
      // Make changes here to the powershell.exe profile.
      "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
      "name": "Command Prompt",
      "commandline": "powershell.exe",
      "hidden": false,
      "colorScheme": "Aurora"
}

IIS Rewrite ve Olası Hatalar

7 Mar

IIS üzerinde bulunan Rewrite modülü, URL için yeniden yazma diye adlandırılan kuralları uygulamayı sağlar.

  • Dış dünyaya açık olmayan iç sunuculara erişimin kontrolü
  • Kurumunuzdan tek bir IP üzerinden erişim sağlanabilen URL adreslerine erişimin çoğaltılabilmesi ve güvenlik altına alınabilmesi

gibi bir dizi kuralların uygulanması URL Rewrite modülü ile gerçekleştirilebilir. Bunun için IIS üzerinde bir Web site veya bir web site içerisine oluşturulan bir uygulama üzerinden bu kurallar tanımlanabilir.

Kurallar IIS arayüz ekranından tanımlanabildiği gibi, web sitesi dizininde bulunan Web.config dosyasında de tanımlanabilmektedir. Zaten arayüzden yapılan ayarlar da Web.config içerisine yazılmaktadır.

Örnek Kurallar

Bu kurallara göre,

  • Kuralı uyguladığınız siteye, örneğin http://uygulama.com/api şeklinde gelen talepler http://172.16.10.11/api adresine yönlendirilir.
  • http://uygulama.com/api?a=1&b=2 ile gelen querystring parametreleri aynı şekilde yönlendirmeye taşınır.
  • http://172.16.10.11/api adresindeki api, basic authentication ile doğrulama gerektiriyor. Kullanıcı adı ve şifre bilgileri Base64 string olarak kodlanıp sunucu değişkeni(server variable) olarak eklenmektedir.

Server Variable Hatası

Kurallara ServerVariables eklendiğinde karşılaşılabilecek olası hatlardan biri 500 internal error olacaktır.

Hata sayfasında hata hakkında detaylı bilgi bulunmamaktadır. Detaylı bilgileri alabilmek için Web.config içerisinde hata aşağıdaki ayarları yapabilirsiniz.

<system.webServer>    
   <httpErrors errorMode="Detailed" />     
</system.webServer> 
<system.web>     
    <customErrors mode="Off"/>
</system.web>

Bu ayarlamadan sonra hata detaylarını şu şekilde görebilirsiniz.

HTTP Error 500.50 – URL Rewrite Module Error.

The server variable “HTTP_Authorization” is not allowed to be set. Add the server variable name to the allowed server variable list.

Hata detayına göre Server Variable olarak kullanılacak bilginin IIS web sitesinde önceden belirtilmesi gerekmektedir. Bunun için URL Rewrite penceresinde, sağ taraftaki View Server Variables kısmından HTTP_AUTHORIZATION değişkenini eklemelisiniz. Bu sayede URL Rewrite modülüne, Authorization header tanıtılmış olacak ve hata ortadan kalkacaktır.

PowerShell Robocopy ile hızlı dosya kopyalama

16 Kas

Büyük boyutlu dosyaların transferinin copy/paste yöntemi ile yapılması mümkün olmayabiliyor. Benim başıma gelen gerçek bir sorun, bir uydu fotoğrafının tile denen 256×256 pixel boyutunda parçalara ayırdığında oluşan devasa (yaklaşık 250GB) boyutlu verinin sunuculara aktarılmasıydı. Bu işlem sonucunda oluşan verinin ağdaki başka bir sunucuya taşınması öyle kopyala yapıştır gibi klasik yöntemlere olacak gibi değildi.

Windows ortamında robocopy‘nin gücü kullanılarak PowerShell veya Console üzerinden bu gibi büyük verilerin taşınması kolay bir şekilde yapılabilmektedir.

Robocopy ile dosyaların bir yerden bir yere taşınması için temel yazım biçimi şu şekildedir:

robocopy <kaynak> <hedef> [<dosya>[ ...]] [<seçenekler>]

Örneğin, “C:\tiles” dizinindeki tüm dosyalar “D:\tiles” dizinine taşımak için aşağıdaki komut kullanılır. Burada alt dizinler ve dosyalar dikkate alınmaz, ancak tüm sistem dosyaları ve gizli dosyalar taşınır.

robocopy C:\tiles D:\\tiles

Eğer, tüm alt dizinler ve dosyalar da taşınacaksa komuta aşağıdaki gibi “/S” parametresi eklenir. Ancak bu parametre boş dizinleri dikkate almaz.

robocopy C:\tiles D:\\tiles /S

Eğer boş dizinleri de taşımak isterseniz komuta “/E” parametresi eklenmelidir.

robocopy C:\tiles D:\\tiles /E

Eğer ağdaki başka bir bilgisayara taşıma işlemi yapılacaksa, ilgili bilgisayarda bir dizinin paylaşıma açılması gerekmektedir.

Robocopy için bir çok kullanışlı parametreye buradan ulaşabilirsiniz.

PowerShell ile dosyaları yeniden adlandırma

18 Eki

PowerShell Nedir?

PowerShell, Windows işletim sistemine 2006 yılında eklenen, bir komut satırı kabuğu(shell) ve kendine özgü bir betik dilinden (script language) oluşan bir yönetim aracıdır.

PowerShell ile dosyalar nasıl yeniden adlandırılır?

PowerShell aracı, grafik ara yüzü olmayan bir komut satırı aracı olması sebebiyle bütün işlemleri komutlar üzerinden yürütür.

PowerShell ile dosyaları tek tek veya toplu bir şekilde yeniden adlandırmak çok kolaydır. Dosyaları yeniden adlandırmak öncelikle komut satırından dosyaların bulunduğu dizine geçilir.

Yukarıda listelenen dosyaların hepsinin isimlerinde “foo.com” şeklinde bir web sitesine ait gereksiz bir bilgi bulunmaktadır. Bu gereksiz bilgiyi kaldırarak dosyaları temiz bir adlandırmaya kavuşturmak için aşağıdaki komutu kullanabiliriz.

dir *.txt | rename-item -newname {$_.name -replace " foo.com", ""}

Yukarıdaki komut, *.txt dosyalarını seçerek bu dosyaların adlarında bulunan foo.com metnini ve önündeki bir adet boşluk karakterini kaldırır.

Bu şekilde, dosyalarımıza temiz bir şekilde yeniden adlandırılmış olur. Dosyaların uzantılarını da benzer şekilde değiştirmek mümkündür. Doysa sayılarının çok fazla olduğu durumlarda son derece etkili bir yöntem olarak kullanılabilir.

IIS ile Self Signed Certificate Oluşturma

17 Haz

Self Signed Certificate yani Otomatik Olarak İmzalanan sertifikaların IIS yardımı ile oluşturulması adımları aşağıdaki gibidir.

IIS ana penceresinde bulunan “Sunucu Sertifikaları” bölümüne girilir.

1

Bu bölümde ki sağ pencerede bulunan “Otomatik Olarak İmzalanan Sertifika Oluştur” seçeneği seçilir.

2

3

Otomatik imzalanan sertifika oluşturma penceresinde bir sertifika adı ve sertifika deposu seçilir.

4

Oluşturulan yeni sertifika artık Sunucu Sertifikaları listesinde görünmektedir. Sağ bölümde bulunan “Dışarı Aktar” seçeneği ile açılan pencerede sertifikanın nereye aktarılacağı ve şifresi belirlenir.

5

Sertifika”C:\Temp\” dizini altına başarılı bir şekilde oluşturulmuştur. Sertifikayı Base64 olarak kodlanmış bir metin halinde almak için kullanılabilecek C# kodu:


Convert.ToBase64String(File.ReadAllBytes(@"C:\\Temp\B3CERT.pfx"));

 

Windows 10 sürümüne geçiş

22 Eyl

Windows 8 sonra Windows 8.1 derken eylül 2015 itibarıyla şu an ki nihai sürüm olan Windows 10 sürümüne geçiş yapmış bulunuyorum.

Windows 10 sürümünde il göze çarpan başlat menüsünün yeniden düzenlenerek klasik başlat menüsü halinde kullanıcılara sunulmasıdır. Windows 8 sürümlerinde başlat menüsü yerinde metro style denen bir arayüz tasarlanmıştı. Bana göre son derece gereksiz ve kullanışsız olan bu arayüz nihayet kaldırılmış. Ancak başlat menüsünün bir kenarında hala etkisi küçük bir pencere şeklinde devam ediyor.

Başlat Menüsü
Başlat Menüsü

 

Windows 8 sürümlerinde Windows App Store uygulamalarının tam ekranda açılması kullanıcılarının görev çubuğuna erişmesini engelliyordu. Windows 10 sürümünde bu sıkıntı ortadan kaldırılmış ve pencere şeklinde çalışma imkanı sunulmuş.

Pencere Yapısı
Pencere Yapısı

 

Bir diğer özellik olan multitask özelliği biraz değişikliğe uğramış ve Ctrl+Tab kısayolu ile çalışan uygulamaları gösteren  pencerenin görünümü yenilenmiş.

Multitask
Multitask

 

Çalışan tüm uygulamaları görebilmek için görev çubuğuna Görev Görünümü adında bir kısayol da oluşturulmuş. Görev görünümünde sağ altta Yeni Masaüstü ekleme tuşu sayesinde birden fazla sanal masa üstü ayarlamanıza olanak sağlanmış. Bu sayede iş bölümlerinde göre kategorize edilebilen masaüstleri oluşturmak mümkün hale geliyor. Örneğin internet tarayıcıları ve ofis çalışma dosyaları ayrı masaüstü kategorilerinde tutulabilir.

Sanal Masaüstü
Sanal Masaüstü

 

Yeni özellikleri keşfettikçe eklemeye devam etmeye çalışacağım. Şimdilik bu kadar. Bir sonraki yazıda görüşmek dileğiyle.

Faydalı Windows ipuçları ve klavye kısayolları

24 Haz

Bu yazıda Windows işletim sistemini kullanırken sıklıkla başvurduğum ipuçlarını sizlerle paylaşmak istedim. Microsoft işletim sistemlerinde bütünlüğü sağlamak adına klavye kısayolları ve işletim sistemi ayarları standarttır. Bu standartlar bize hız kazandırmak için geliştirilmektedir. Şimdilik aklıma gelen ipuçlarını paylaşıyorum, yenileri olduğunda yazıyı güncellemeye çalışacağım.

1- Pencere Ön İzleme Kısayol Tuşu Alt+P

Bir pencere açıkken Alt+P tuşları ile pencere içindeki dosyaların ön izlemesi yapılabilir.

Pencere Önizleme
Pencere ön izleme

2- Pencereyi Konumlandırma Window+Yön Tuşları

  • Window + Left Aktif pencereyi ekranın sol yarım köşesine konumlandırır.
  • Window + Right Aktif pencereyi ekranın sağ yarım köşesine konumlandırır.
  • Window + Top  Aktif pencereyi tam ekran yapar.
  • Window + Down  Aktif pencereyi minimize eder.

Window yön tuşları
Window yön tuşları

3- Ekran Büyüteç Aracı Window+Artı Tuşu

Window ile birlikte artı tuşuna bastığımızda ekrana bir büyüteç penceresi gelir. Bu pencere açıkken Window+ veya Window- ile ekran boyutunu ayarlamak mümkündür.

Büyüteç
Büyüteç kısayolu

4- Pencerelerin Ekran Ön İzlemesi Window+T Tuşu

Açık pencerelerin windows ortamında küçük helde ön izlemelerini görüntülemek için Window+T tuşunu kullanabilirsiniz.

Ön bakış
Ön bakış

 

5- Adım Kaydedicisi psr.exe

Windows Başlat menüsündeki arama satırına psr.exe yazıp enter’a basarak hata kaydediciyi çalıştırabilirsiniz. Kaydı başlatın, bilgisayarınızı kullanın ve hata olduktan sonra kaydı bitirip, HTML slayt gösterisini istediğiniz kişiyle paylaşın.

Adım Kaydedicisi
Adım Kaydedicisi

6- Boş sürücüleri gizleme ayarı

Klasör seçeneklerinden Boş sürücüleri sakla seçeneğinin işaretini kaldırarak, Bilgisayarım penceresinde görünen boş sürücüleri görünmez yapabilirsiniz.

Boş sürücüler
Boş sürücüler

 

7- Bilgisayarım Penceresi Kısayolu Window+E Tuşu

8- Windows’u KilitlemeWindow+L Tuşu

9- Açık Pencereler Arasında Gezinme Alt+Tab Tuşu

10- İnternet Tarayıcısında(IE, Chrome, Firefox), Tab Pencereleri  Arasında Geçiş için Ctrl+Tab Tuşu

11- Tüm pencereleri küçültüp masa üstüne geçmek için window+D tuşu

C# MSMQ Mesaj Yönetimi, Okuma Yazma İşlemleri

21 Haz

MSMQ teknolojisi ile alakalı bir önceki yazıda MSMQ tanıtımını yapmış ve Windows işletim sistemlerine nasıl dahil edildiğini incelemiştik.

Bu yazıda ise mesajların MSMQ kuyruğuna nasıl yazıldığını ve kuyruktaki mesajların nasıl okunduğunu incelemeye çalışacağız.

Öncelikle mesaj nedir bundan bahsedelim. MSMQ teknolojisindeki mesaj kavramı aslında bir programlama dili ile oluşturulan nesnelerin serileştirilmiş halleridir. Bir nesne binary veya xml gibi formatlarda serileştirilebilir. Serileştirilmiş nesneler MSMQ gibi mesaj tabanlı iletişim ortamlarında mesaj olarak değerlendirilir.

MSMQ sisteminde mejsalar kuyruk denilen bir dizgede tutulur. Kuyruklar günlük hayattaki posta kutularına benzer. Postacı gelip zarfı posta kutusuna bırakır. Daha sonra ev sahibi gelip kutudaki zarfı açarak mesajı okuyarak ne yapacağını anlar ve gereğini yapar.

C# programlama dili ile MSMQ kuyruğundaki mesajları yönetmek mümkündür. Windows işletim sisteminde MSMQ kuyruğunu bilgisayar yönetimine girerek Private Queue seçeneğinden görüntüleyebiliriz.

MSMQ
MSMQ

.Net Framework içerisinde System.Messaging namespace altında mesaj trafiğini yönetebilecek tipler bulunmaktadır.

MessageQueue tipine ait üyeler yardımıyla sistemde bir kuyruk mevcut mu diye kontrol edilebilir, mevcut değilse yeni kuyruk oluşturulabilir. Mevcut kuyruğa bir mesaj eklenip, kuyruktan bir mesaj alınabilir. Aşağıdaki örnek kod ile kuyruğa mesaj yazma işlemi gerçekleştirilmektedir.

MessageQueue messageQueue = null;

if (MessageQueue.Exists(@".\Private$\EmailQueue"))
{
    messageQueue = new MessageQueue(@".\Private$\EmailQueue");
}
else
{
    // Kuyruk oluştur.
    MessageQueue.Create(@".\Private$\EmailQueue");
    messageQueue = new MessageQueue(@".\Private$\EmailQueue");
}

messageQueue.Send("Bu ilk bir MSMQ mesajıdır", "Title");

Kuyruktaki mesajları okumak senkron veya asenkron şekilde yapılabilmektedir. MessageQueue tipine ait aşağıdaki metodlar:

  • BeginPeek()
  • BeginReceive()

asenkron şekilde mesajları okumaya olanak sağlar. bu mesajların override edilmiş şekilleri burada mevcuttur.

BeginPeek() metodu çağrılmadan önce PeekComplated event handler oluşturmak gerekir ki okunan mesajın içeriğine erişebilelim. Aynı şekilde BeginReceive() metodu çağrılmadan önce ReceiveComplated event handler oluşturmak gerekir. BeginPeek() ile alınan mesajlar kuyruktan silinmezken BeginReceive() ile okunan mesajlar kuyruktan silinir. Bu fark, süreçleri yönetmek açısından önemlidir. Aşağıdaki örnek kod, tek bir mesajın kuyruktan asenkron olarak alınmasını sağlar. BeginReceive() kullanıldığı için alınan mesaj kuyruktan silinecektir.

MessageQueue messageQueue = null;

if (MessageQueue.Exists(@".\Private$\EmailQueue"))
{
    messageQueue = new MessageQueue(@".\Private$\EmailQueue");
    messageQueue.ReceiveCompleted += new
           				ReceiveCompletedEventHandler(EmailReceived);
    messageQueue.BeginReceive();
}

private static void EmailReceived (Object source,
            ReceiveCompletedEventArgs asyncResult)
{
    MessageQueue mq = (MessageQueue)source;
    Message m = mq.EndReceive(asyncResult.AsyncResult);
    Console.WriteLine("Message: " + (string)m.Body);
}

MessageQueue tipinde senkron bir şekilde mesaj almak için aşağıdaki metodları kullanılabilir:

  • Peek()
  • Receive()
  • GetAllMessages()

Yani Peek() veya Receive() metodu çağrıldığında kuyruktan bir mesaj gelene kadar başka işleme geçilmez. Oysa asenkron metodlarda BeginPeek() veya BeginReceive() komutlarından sonra başka işlem varsa onlar yürütülebilmekteydi.

GetAllMessages() metodu kuyruktaki tüm mesajları getirmek için kullanılır.

 MessageQueue queue = new MessageQueue(@".\Private$\EmailQueue");

 Message[] msgs = queue.GetAllMessages();

 foreach(Message msg in msgs)
 {
     Console.WriteLine(msg.Body);
 }

Mesaj kuyruğuna bir text yerine bir nesneyi göndermek mümkündür. Bu işlem için öncelikle serileştirilecek olan tipin belirlenmesi gerekmektedir. Serileştirilecek olan tip aşağıdaki şekliyle Email adında belirlenmiş ve [Serialize] attribute ile imzalanmıştır.

[Serialize]
public class Email{
     public string From {get; set;}
     public string To {get; set;}
     public string Body {get; set;}
}

Bu nesnenin bir örneğini kuyruğa eklemek için aşağıdaki gibi bir yöntem izlenir.

Email mail = new Email{
   From = "sender@mail.com",
   To = "receiver@mail.com";
   Body = "Merhaba bu bir test mesajıdır.";
};
MessageQueue messageQueue = null;

if (MessageQueue.Exists(@".\Private$\EmailQueue"))
{
    messageQueue = new MessageQueue(@".\Private$\EmailQueue");
}
else
{
    // Kuyruk oluştur.
    MessageQueue.Create(@".\Private$\EmailQueue");
    messageQueue = new MessageQueue(@".\Private$\EmailQueue");
}

Message message = new Message();
message.Formatter = new BinaryMessageFormatter();

messageQueue.Send(message);

Temel olarak MSMQ mesaj yönetimi bu şekilde yapılmaktadır. Buradaki örnekler yazma ve okuma işlemlerini gösteren tek bir uygulama gibi anlaşılabilir. Ancak dağıtık mimarilerde kuyruğuna yazım işlemini bir uygulama yaparken, kuyruğu sürekli kontrol etme işlemini işletim sistemine bağlı bir servis sağlıyor olabilir. Ya da zamanlanmış görev mantığı ile çalışan bir client uygulama da kuyruktaki mesajları okuyarak gerekli görevleri yerine getirebilir. Senaryoları tasarlamak tamamen ihtiyaca ve beceriye kalmıştır.

Bir sonraki yazıda görüşmek dileğiyle.