10 Mart 2012 Cumartesi

Adım Adım WCF-5 (IIS TCP Hosting)

Kısa bir aradan sonra yeni makaleyle WCF dünyasını incelemeye devam ediyoruz. Bu makalemizde bir WCF servisini TCP protokolü üzerinden yayınlayacağız,

Daha öncede bahsettiğimiz üzre IIS 7.0 ve WAS sayesinde msmq,tcp,pipe,http gibi protokolleri kullanan uygulamaları IIS üzerinden host edebiliyorduk. Bunun bize kazandıracağı en büyük avantaj ise şimdilik host edebilmeinin rahatlığı ve IIS in tüm nimetlerinden yararlanabilme olarak gözüküyor. Fakat windows servisler kadar performanslı olmadığıda kabul edilmiş bir gerçek.
Programımızı yazmaya başlamadan önce yapmamız gerekn ön hazırlıklar var. Windows Vista veya Server 2008 de Windows özelliklerinden WAS ı aktif hale getiriyoruz. Daha sonra “.NET Framework 3.0 ->Non-Http Activation” ı da aktif hale getiriyoruz. Aşağıdaki resimde de yapılacak işlem açıkca görülmektedir.

tcp1

Sonrasında yeni bir proje açarak, uygulamamıza başlıyoruz. Açacağımız uygulama WCF Service Application olacak. Bu proje templatinde hazır yazılmış bir WCF servisi otomatik ekleniyor. Bizde kodu çok fazla bozmadan sadece tcp end point ekleyeceğiz. Bu işlemi VS 2008 ile birlikte gelen WCF Configuration editleme ekranı yardımıyla yapacağız.

2

Ardından servisimize yeni bir endpoint ekliyoruz. Binding tipi olarak  “netTCPBinding” seçiyoruz.
3

Bu işlem sonrasında  kofigürasyon dosyamıza baktığımızda şu şekilde olduğunu görüyoruz.  Üç tane endpointimiz var. Bunlardan ikisi template ile beraber gelen http endpointi ve mex endpointi. Üçüncü endpoint ise bizim eklediğimiz tcp endpoint olmaktadır.
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="TcpWAS.Service1Behavior" name="TcpWAS.Service1">
        <endpoint address="" binding="wsHttpBinding" name="wsHttpEP" contract="TcpWAS.IService1" />
        <endpoint address="mex" binding="mexHttpBinding" name="mexHttpEP" contract="IMetadataExchange" />
        <endpoint binding="netTcpBinding" bindingConfiguration="" name="netTcpEP" contract="TcpWAS.IService1" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="TcpWAS.Service1Behavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


Ardından IIS de  bir web application oluşturup, dizin olarakta yazdığımız servisi gösteriyoruz. Fakat IIS üzerinde yapılacak işlemler bununla bitmiyor.
IIS de yaratmış olduğumuz uygulamada default olarak sadece http desteği geliyor. tcp desteğini sağlamak içinde komut satırına aşağıdaki komutu yazıyoruz.

%windir%\system32\inetsrv\appcmd.exe set app  "Default Web Site/TcpWAS" /enabledProtocols:http,net.tcp
Bu komutun yaptığı iş IIS konfigürasyon dosyasına ilgili site için gerekli izinleri sağlamak.
IIS Konfigürasyon dosyası için;      %windir%\system32\inetsrv\config komutu yazılıp bu dosya incelenebilir. Yapılan değişikler sonrası IIS konfigürasyon dosyasında uygulamamıza ait kısımda “enabledProtocols” özelliğine net.tcp ninde eklendiğini görüyoruz.
<application path="/TcpWAS" enabledProtocols="http,net.tcp">
                   <virtualDirectory path="/" physicalPath="C:\Users\osimsek\Desktop\WCFDemo\TcpWAS\TcpWAS\TcpWAS" />
               </application>
Ardından Client uygulamamızı yazmaya başlıyoruz:
Bir console application yaratıyoruz ve hemen ardından; servisimizi referans olarak ekliyoruz. Burada adres olarak http endpointi kullanabiliriz.

4

Sonrasında client tarafında oluşturlan tcp endpointi kullanarak servisimizi çağırıyoruz.
Service1Client client = new Service1Client("netTcpEP");
        while (true)
           {
               Console.WriteLine("A number please!");
               Console.WriteLine(client.GetData(Convert.ToInt32(Console.ReadLine())));
           }
Çıktı:
Untitled

Sonuç olarak TCP üzerinden çalışan ve IIS üzerinde host ettiğimiz bir servisimiz oldu. Bir sonraki makalemizde  görüşmek dileğiyle “esen kalın:)”
Örneği indirmek için tıklayınız.

Kaynak: http://simsekonur.blogspot.com/2009/04/adm-adm-wcf-5iis-tcp-hosting.html

Hiç yorum yok: