11 Nis 2009 Silverlight 3 Beta - Lokal Mesajlaşma (Local Messaging) Kategori: Silverlight Etiketler: Silverlight 3 BetaSilverlight 3 Yorum Merhaba arkadaşlar, bu makalemizde Silverlight 3 Beta ile birlikte gelen Lokal Mesajlaşma (Local Messaging) işleminin nasıl yapıldığını inceleyeceğiz.Silverlight 3 Beta ile birlikte gelen Local Messaging(Lokal Mesajlaşma) özelliği ile iki Silverlight uygulaması arasında iletişim kurup birbirlerine mesajlar göndermesini sağlayabiliyoruz. İster bir sayfada ki iki Silverlight uygulaması arasında, ister sekmeler(tab) arasında ki sayfaların içerisinde yer alan Silverlight uygulamalarında ve istersek farklı browserlar da bulunan Silverlight uygulamalarının birbirleriyle haberleşmesini sağlayıp buna bağlı olarak çeşitli işlemler yapıp birbirleri arasında veri alışveriş yapabiliyoruz. Yani Internet Explorer da çalışan bir Silverlight uygulaması, Safari de çalışan Silverlight uygulamasına bir mesaj gönderebiliyor. Safari de çalışan uygulama da bu mesaja bağlı olarak işlemler yapabiliyor. System.Windows.Messaging namespace’i altında mesaj göndermek ve mesajı almak için 2 sınıf var. Mesajı göndermek için LocalMessageSender, Mesajı almak için LocalMessageReceiver sınıfını kullanıyoruz. Yeni bir Silverlight uygulaması oluşturalım. Bu uygulama bizim için başka bir uygulama ile iletişim kurup o uygulamaya mesaj gönderecek. Bu uygulama içinde bir TextBox ve bir de Button olsun. Butona bastığımızda TextBox’a girilen bilgiyi diğer uygulamaya göndereceğiz. [XAML] <UserControl xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006”x:Class="Silverlight30LocalMessaging.MainPage" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <TextBox x:Name="txtMessage" Margin="82,86,86,0" VerticalAlignment="Top" Text="" TextWrapping="Wrap"/> <Button x:Name="btnGonder" Margin="163,124,173,0"VerticalAlignment="Top" Content=" Gönder"/> </Grid></UserControl> Butona tıklandığında mesaj gönderme işlemini yapacağız, bunun için ilk olarak Click eventini oluşturalım. Bu Event içinde mesajı gönderebilmemiz için postaci isminde LocalMessageSender nesnesi oluşturalım. LocalMessageReceiver nesnesinin SendAsync metodunda alıcıya göndereceğimiz bilgiyi bildiriyoruz. Mesaj gönderildiğinde tetiklenen SendCompleted isminde bir event var. Bu eventinin eventargument’in Response özelliği ile mesajı alanın bize gönderdiği cevabı alabiliriz. [C#] namespace Silverlight30LocalMessaging{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); // Button için Click Eventini oluşturalım. this.btnGonder.Click += new RoutedEventHandler(btnGonder_Click); } void btnGonder_Click(object sender, RoutedEventArgs e) { // Local Messaging özelliğini kullanabilmemiz için System.Windows.Messaging namespace’i altında yer alan Local MessageSender sınıfını kullanıyoruz. Yapıcı metotda alıcı için bir isim belirtiyoruz. System.Windows.Messaging.LocalMessageSender postaci = new System.Windows.Messaging.LocalMessageSender("Adres"); // Gönderilecek olan mesajı SendAsync metodu ile gönderiyoruz. postaci.SendAsync(txtMessage.Text); // Mesaj yerine gettiğinde çalışacak olan eventi oluşturalım. postaci.SendCompleted += new EventHandler<System.Windows.Messaging.SendCompletedEventArgs>(postaci_SendCompleted); } // Mesaj yerine gettiğinde çalışacak olan event. Mesajı alan silverlight uygulaması geriye bir yanıt gönderebilir, e.Response özelliği ile alıcının bize yolladığı bu yanıtı verir. void postaci_SendCompleted(object sender, System.Windows.Messaging.SendCompletedEventArgs e) { MessageBox.Show(e.Response); } }} Mesajı gönderdik, mesajı alacak bir alıcı yani başka bir Silverlight uygulamasına ihtiyacımız var. Bunun için bir Silverlight uygulaması daha oluşturalım. Bu uygulamada sadece TextBlock olsun. TextBlock kontrolünün text özelliğinde gönderilen mesajı görüntüleyeceğiz. [XAML] <UserControl x:Class="Silverlight30LocalMessagingAlici.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="300"> <Grid x:Name="LayoutRoot" Background="White"> <TextBlock x:Name="tbAlici" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center" ></TextBlock> </Grid></UserControl> Uygulama çalıştığında Mesajları alabilmek için alici adında LocalMessageReceiver nesnesi oluşturalım. LocalMessageReceiver nesnesinin gönderilen mesajları alabilmesi için Listen metodunu çağırmamız gerekir. Uygulamaya Mesajlar asenkron olarak gelecektir, Mesaj geldiğinde haberdar olabilmemiz için MessageReceived isimli bir event var. Bu event ile gelen mesajı alıp, mesajı gönderene cevap gönderebiliriz. Gelen mesajı almak için MessageReceived eventinin argümanları arasında Message isimli bir özellik var. Mesajı gönderene cevap göndermek için de Response özelliğini kullanabiliyoruz [C#] namespace Silverlight30LocalMessagingAlici{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); // Uygulama çalıştığında çalışacak olan event. this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { // Uygulama çalıştığında mesajın alınabilmesi için LocalMessageReceiver nesnesini oluşturalım. Yapıcı metodunda gönderen tarafında bildirilen adresi bildiriyoruz. System.Windows.Messaging.LocalMessageReceiver alici = new System.Windows.Messaging.LocalMessageReceiver("Adres"); // Alıcıyı mesajları alabilmesi için açıyoruz. Alici dinlemeye başladı… alici.Listen(); // Mesaj geldiğinde çalışacak olan eventi oluşturalım. alici.MessageReceived += new EventHandler<System.Windows.Messaging.MessageReceivedEventArgs>(alici_MessageReceived); } void alici_MessageReceived(object sender, System.Windows.Messaging.MessageReceivedEventArgs e) { // Mesaj geldi, EventArgument’de Response isimli bir özellik var. Bu özellik mesajı gönderene bir yanıt gönderiyor. e.Response = "Teşekkürler, Mesaj alındı !"; // EventArgument’in Message özelliği bize gönderilen mesajı veriyor. tbAlici.Text = e.Message; // EventArgument’in SenderDomain özelliği mesajı gönderen uygulamanın adresini veriyor. // e.SenderDomain; } }} Şimdi uygulamalarımızı test edelim, iki uygulamayı da çalıştıralım. Farklı browserlar da test edelim, Chrome’da mesajı gönderen uygulamayı çalıştıralım. Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)Sem GÖKSU www.semgoksu.com | www.yazilimgunlugu.com sem.goksu@yazilimgunlugu.com Kaynaklarmsdn.comsilverlight.net Yorum (3) recep selli / 12.4.2009 01:42:28 Gerçekten çok güzel bir makale bu silverlight giderek dikkatimi çekmeye başladı :)) Mahmut KANTAR / 16.4.2009 14:22:21 First Class Gökhan ERTAŞ / 8.8.2010 05:38:15 tebrik ederim güzel bir makale böyle kaliteli makaleleri Türkçe görmek çok güzel... Yorum Yaz * Ad Soyad: * Email: * Message:
Yorum (3) recep selli / 12.4.2009 01:42:28 Gerçekten çok güzel bir makale bu silverlight giderek dikkatimi çekmeye başladı :)) Mahmut KANTAR / 16.4.2009 14:22:21 First Class Gökhan ERTAŞ / 8.8.2010 05:38:15 tebrik ederim güzel bir makale böyle kaliteli makaleleri Türkçe görmek çok güzel...
recep selli / 12.4.2009 01:42:28 Gerçekten çok güzel bir makale bu silverlight giderek dikkatimi çekmeye başladı :))
Gökhan ERTAŞ / 8.8.2010 05:38:15 tebrik ederim güzel bir makale böyle kaliteli makaleleri Türkçe görmek çok güzel...