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.
 

Reklamlar


Bu girdiye atılan yorumlar:

No comments posted yet.

Yorumunuzu buradan giriniz

Yorumlar onaylandıktan sonra yayınlanacaktır

*


*


 (Görüntülenmeyecek)


 (İsminizde link olarak görüntülenecek)

*
Bold Italic Underline Blockquote Hyperlink Hyperlink

 

Please add 1 and 8 and type the answer here:

Yorum Önizleme:

 

Arama



Hakkımda

Merhaba, ben Gürkan Yeniçeri. 9 yılı aşkın süredir özel sektör ve hükümet iştiraklerinde yazılım mühendisliği yapıyorum. Bu sitede 2005 Mart ayından beri genelde yazılım mühendisliği ve Microsoft teknolojileri hakkında yazmaktayım. Profesyonel iş geçmişim hakkında daha fazla bilgiyi aşağıdaki Çember.net linkinden alabilirsiniz.
Çember.net
Faturaları ödeyen günlük işim dışında Açık Kaynak Subtext Projesine katkıda bulunuyorum. Bu blogun alt yapısıda Subtext ile hazırlanmıştır. Ayrıca 1999 yılından beri Programlama.com sitesinde VB6 editörlüğü yapıyorum. Fakat takdir edersinizki VB6 artık ölü bir dil, bu nedenle beta sürümlerinden beri C# ve ASP.NET programcılığı ile uğraşıyorum.

kontak

Soru sormak veya öneride bulunmak isterseniz buradaki kontak formunu kullanın. Mesajlarınıza en kısa zaman içinde cevap vermeye çalışacağım. Ayrıca Windows Live Messenger kullanarak gyeniceri {AT} hotmail {DOT} com adresinden bana ulaşabilirsiniz.
Eğer İngilizce blogumu okumak isterseniz buraya buyrun.
Blogumu RSS Bandit gibi bir RSS okuyucusu ile de takip etmek için kullanın.
RSS 2.0

Reklamlar


imleme

Yumilerime ekle   Reddit Türkçe'ye ekle   Limkle   Bag-kur

Vezir

Vezir Proje Danışmanı
Sitede birde Vezir isminde wikimiz var. Bu wikiyi yazmayı düşündüğüm bir kitap için oluşturmuştum daha sonra herkese açmaya karar verdim. Vezir yazılım firması kurmak isteyenlere tavsiyeler vermek için hazırlandı. Ayrıca UML ve Modül Tabanlı Geliştirme hakkında da bilgiler mevcut. Vakit buldukça yeni eklemeler yapıyorum. Değişikliklerden haberdar olmak için RSS çıktısına üye olabilirsiniz.
www.flickr.com
This is a Flickr badge showing public photos from gurkanyeniceri. Make your own badge here.
Bu blogda 246 yazı ve 313 yorum var. Diğer sitelerden 7 adet link gelmiş.

Buradayım

my blogmap

Reklamlar