16 Nisan 2009 Perşembe

WCF Projesi Oluşturma

WCF (Windows Communication Foundation), COM+, .Net Remoting, XML Web Servisleri, MSMQ gibi servisleri tek çatı altında birleştiren bir servis diyebiliriz.
Bazı kaynaklarda, WCF’ in ABC’ si olarak Addresses (Adresler), Bindings (Bağlayıcılar) ve Contracts (Sözleşmeler) kelimelerinden bahsedilmektedir. Bu üçleme, WCF’ in çekirdeğinde yer alan en önemli kavramlardır. Öyleki, dağıtık modele göre servis olarak dış ortama sunulan her bir CLR tipi için bir endPoint tanımlanmak zorundadır. Aslında endPoint bir servisin dış ortama sunulan arayüzü (Interface) olarak düşünülebilir. Yani istemcilerin, proxy üzerinden gönderecekleri ve alacakları mesajların servis tarafında karşılandığı nokta olarak düşünülebilir. Bir endPoint içerisindeki üç önemli parça da adresler, bağlayıcılar ve sözleşmelerdir.


Şimdi basit bir WCF projesi oluşturmak için servis, host ve client projelerini oluştururken sırayla izlenecek adımlara bakalım:

 
1. Önce WcfServiceLibrary projesi eklenir. (Servisi oluşturmak için)
  • Interface (contract) ve bu interface'i implement eden bir class yazılır.
  • Interface'in başına [ServiceContract], içindeki metotların başına [OperationContract] yazılır.
       Metot başına OperationContract yazılmazsa, servis üzerinden bu metoda ulaşılamaz.


IMatematik.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace MatServis
{
       [ServiceContract]
       public interface IMatematik
       {
               [OperationContract]
               double Toplam(double x, double y);
       }
}

Matematik.cs:

namespace MatServis
{
         public class Matematik : IMatematik
        {
                #region IMatematik Members

                public double Toplam(double x, double y)
               {
                      return x + y;
               }

#endregion
       }
}

2. Daha sonra, host projesi (WcfServiceApplication) eklenir.

  • Servis projesi referans olarak eklenir.
  • svc dosyasının adı önceki eklenen servis ismi ile aynı yapılır.
  • svc dosyasının altındaki cs dosyası silinir.
  • svc dosyası açılarak, CodeBehind kısmı silinir ve servis ismi değiştirilir.
<%@ ServiceHost Language="C#" Debug="true" Service="MatServis.Matematik"%>
  • Web.config ayarları yapılır. (Sağ tıklanarak, edit wcf configuration ile, eklenen servise göre)
           - Services Name değiştirilir (Interface'i implement eden class adı)



         - Endpoints Contract değiştirilir (Interface'in adı)




Buradaki binding seçeneği, servisin nasıl davranacağını belirler. Örneğin; wsHttpBinding, web servis gibi, netTcpBinding tcp bağlantısı gibi davranışlar gösterir.


Diğer endpoint ise mex. Web servisin bize cevap verebilmesi için bu tanımlamayı yapmamız gerekiyor. Binding olarak mexHttpBinding, contract olarak IMetadataExchange kullanır.

            
            - Service Behaviours Name değiştirilir.


              

3. Client projesi eklenir.
  • Add Service Reference ile oluşturulan servis, referans olarak eklenir.
  • app.config ayarlarından (edit wcf configuration ile) client ayarları değiştirilebilir. (Otomatik olarak kendisi ayarları oluşturur.)
  • Servisteki class isminin sonuna otomatik olarak Client eklenir. Servis içindeki metotlara ulaşabilmek için, bu client kullanılır.

           IMatematik mat = new MatematikClient();

          string toplam = mat.Toplam(5, 4).ToString();

          Console.WriteLine(toplam);


kodlarıyla servise ulaştığımızı test edebiliriz.

2 yorum:

  1. Merhaba, incelediğim kadarıyla blog'unuz basic kullanıcılara hitap ediyor. Fakat kusura bakmayın Sevgi Hanım ama anlatımınız biraz yemek tarifi gibi olmuş :)
    ...
    -> Servis projesi referans olarak eklenir.
    -> svc dosyasının adı önceki eklenen servis ismi ile aynı yapılır.
    -> Sonra kısık ateşte webconfig pempeleşinceye kadar ısıtılır.

    Yani basic kullanıcı madde madde belirttiğiniz olayı anlamayabilir. Yine de güzel'i işaretliyorum. Kolay gelsin.

    -Orkan

    YanıtlaSil
  2. Bu yorum yazar tarafından silindi.

    YanıtlaSil