Indigo servisleri

#kod{
font-family:Courier new;
font-size:12px;
font-weight:normal;
border:1px dotted #deb887;
background:#ffff99;
padding-top:5px;
padding-left:9px;
}

Indigo servis tabanlı mimarilerin geliştirilmesi için
Microsoft tarafından oluşturulmuş programlama modelidir ve System.ServiceModel
sınıfını kullanır. Servislerin birbirleri arasında ki asenkron mesaj
alışverişini kolaylaştırmak üzere geliştirilmiştir. Eskiden ayrı bulunan .NET
Remoting, ASMX (Web Hizmetleri) .NET Enterprise Services gibi mimarilerin en iyi
tarafları Indigo ile bir çatı altına toplar. HTTP, TCP ve IPC gibi haberleşme
mekanizmalarını destekler, "public", "symetric" anahtarlarını ve güvenlik
sertifikalarının kullanımını kolaylaştırır. XML ve SOAP temelli mesaj
alışverişini de destekler. Indigo, Longhorn Windows içine entegre edilmiş halde
geliyor fakat Windows XP ve 2003 sunucu sistemleri içinde bir sürüm mevcut.
Longhorn’a has bazı özellikler XP ve 2003 sunucular üzerinde mevcut değil fakat
ana fonksiyonlar ve sınıflar erişilebilir durumda.

Bu yazımda sizlere Indigo ile istemci sunucu tabanlı çok basit bir programın
nasıl yazılacağını göstereceğim. Aslında bu yazıyı Mitch benden önce yazmıştı
bende hem Türkçe’ye çevireyim hem herkes yararlansın diye daha ayrıntılı biçimde
yeniden düzenledim. Aşağıdaki kodları çalıştırmak için VS2005 Beta2 ve
Avalon-Indigo Beta1 sürümlerini kurmanız gerekiyor.

Öncelikle projelerimizi barındıracağımız bir “solution” açalım.

Daha sonra bu “solution”‘a bir C# Console projesi ekleyin. İsmini
HelloWorldService verin.

Program.cs dosyasını açıp kodumuzu yazmaya başlayalım. Öncelikle bir arayüz
sınıfı oluşturacağız. Diğer kodlara dokunmadan aşağıdaki kodu yazın.

public interface IHelloWorldService{
   
string SayHello(string Name);
}

Bu arayüz, servisin SayHello fonksiyonunu kullanmamızı sağlayacak.
References kısmına gidip System.ServiceModel isim alanını projenize ekleyin.
Eğer bu isim alanını bulamıyorsanız Indigo yüklü değil demektir. Önce
Avalon-Indigo Beta2’yi indirip kurmanız gerekiyor.
Kodun en tepesine çıkarak “using” bölümüne aşağıdaki kodu ekleyin. Böylece
System.ServiceModel isim alanı içerisindeki sınıflara erişim sağlamış olacağız.
Az önce oluşturduğumuz arayüzü de aşağıdaki gibi değiştirin.

.
.
using System.ServiceModel;
.
.
.
[ServiceContract()]
public interface IHelloWorldService
{
   
[OperationContract()]
   
string SayHello(string Name);
}

Şimdi bu arayüzü doğrulayacak bir sınıf oluşturup SayHello fonksiyonun gerçekte
ne iş yapacağını belirtelim.

public class HelloWorldService:IHelloWorldService{
   
public string SayHello(string name){
       
string greeting = string.Format("Hello {0}", name);
       
return greeting;
   
}
}

Bu işlemlerden sonra esas port dinlemesini yapacak ve SayHello fonksiyonunu
tetikleyecek sınıfı yazalım. Projeyi ilk yarattığınızda oluşturulan Program
sınıfını aşağıdaki gibi değiştirin.

public class Program{
   
public static void Main(){
       
ServiceHost<HelloWorldService> host = new ServiceHost<HelloWorldService>();
       
host.AddEndpoint( typeof(IHelloWorldService),
       

           
new WSProfileBinding(),
           
new Uri ("http://localhost:8000/HelloWorldService")
       
);
       
host.Open();
       
Console.WriteLine("Servis dinlemede. ENTER tusu ile sonlandırabilirsiniz");
       
Console.ReadLine();
       
host.Close();
   
}
}

Artık programımız çalıştırmaya hazır. Tabii bu sadece sunucu tarafı. Fakat
çalışıp çalışmadığını kontrol edebiliriz. Eğer buraya kadar herşeyi doğru
yaptıysanız F5 tuşu ile çalıştırdığınızda aşağıdaki DOS ekranını görmeniz
gerekir.

Servisimiz çalıştığına gore Internet Explorer ile test edebiliriz.
http://localhost:8000/HelloWorldService adresine giderseniz aşağıdaki ekranı
görmeniz gerekir.

Bu ekranda anlatıldığı gibi servise ulaşmak için bir WSDL dosyası üretmemiz ve
bir proxy sınıfı oluşturmamız gerekiyor.

VS2005 komut satırını açın ve svcutil.exe çalışıyor mu bakın. Çalışıp
çalışmadığını anlamak için svcutil.exe yazıp enter’a basmak yeterli. Eğer
“svcutil bulunamadı” şeklinde bir hata mesajı alıyorsanız veya Dos komut
satırını ilk açtığınızda hata mesajları veriyorsa VS2005 komut satırınız hatalı
açılmış demektir. Kapatıp özelliklerinden Target kutusundaki yolu değiştirmemiz
gerekiyor. Doğrusu:

%comspec% /k ""C:\Program Files\Microsoft Visual Studio
8\Common7\Tools\vsvars32.bat"" x86

Aşağıdaki komut ile iki dosya oluşturacağız. Bunlar istemci programımızda proxy
sınıfını oluşturmak için kullanılacak. Dosyaların nerede oluşturulduğuna dikat
edin daha sonra bunları istemci programımızın bulunduğu dizine kopyalayacağız.
Projenizi çalışır halde bırakıp aşağıdaki komut ile dosyaları yaratın.

Svcutil.exe http://localhost:8000/HelloWorldService?wsdl

Buraya kadar her şey mükemmel gidiyor. Bir Indigo servisi oluşturup bu servise
ulaşım için gerekli proxy sınıflarını oluşturacak dosyaları yarattık.
Şimdi “solution”‘a ikinci bir Console projesi ekleyip ismini HelloWorldClient
verin. Proje oluşturulduktan sonra bir önceki adımda yarattığımız iki dosyayı
client projesinin bulunduğu dizine kopyalayın. Output.config dosyasının ismini
app.config olarak değiştirin ve son olarak ta bu iki dosyayı client projesine
ekleyin.
App.config dosyası servise nasıl ulaşılacağını tempuri.org.cs dosyasıda servisi
çağırmak için kullanılacak proxy sınıfını tanımlar.

İstemci programındaki Program sınıfını aşağıdaki gibi değiştirin. Intellisense
HelloWorldServiceProxy sınıfını otomatik olarak göstermelidir. Eğer
göstermiyorsa bir yerlerde yanlışlık yaptınız demektir.

class Program
{
   
static void Main(string[] args){
       
HelloWorldServiceProxy proxy = new HelloWorldServiceProxy();
       
string greeting = proxy.SayHello("Gurkan");
       
Console.WriteLine(greeting);
   
}
}

Proje dosyalarının son görüntüsü aşağıdaki gibi olmalıdır.

Artık istemci programımızda hazır olduğuna göre test edebiliriz. Sadece istemci
projesini derleyip exe’leri oluşturun. Ana proje HelloWorldService olduğu için
F5’e basınca bu proje çalışacaktır. F5’e basıp sunucu projesini çalışır halde
bırakın. İstemci projesinin derlenmiş exe dosyasını (<proje dizini>\HelloWorldClient\bin\Debug)
bulup DOS komut satırında çalıştırın. Aşağıdaki mesajı almanız gerekir.

İşte size bir Indigo servisinden gelen mesaj. Bende biraz endorfin etkisi
yaratmıştı ilk çalıştırdığımda umarım sizede bir nebze mutluluk verir.
 

Posted in Bilişim, Türkçe.