Web servisleri gereksinimden çıktı.
WCF’nin temeli  ABC harflerine dayanıyor.
Address
Contrat
Binding
bağlantıların belirleneceği bir yapı oluşturulmasını sağlar.
Teknoloji bunun üzerine dayalıdır.
XML formatında çalışır.
Bu adresten bu contratla şu adrese bağlan. Bir adres tanımlanır. Bu adres üstünden bağlantılar tanımlanır.
Basic http
Web http
TCP
Bu bağlantıların güvenlik farkı var.
Bu konu ile ilgili yazilimdevi.com’da Tolga AYAS’ın makaleleri ve diğerleri okunabilir.
Wcf binding msdn sitesinden baktık. Social.msdn.microsoft.com
WCF provider
En çok Basichttp ve Webhttp bağlantıları kullanılır.
TCPIP gibi locale de hizmet verir.
Contract-Attributeleri metotları tanımlanabilir.
Kullanımı: WCF yapısında SOAP servisi nasıl oluşturulur.
WebServis
Iservis –Contract
Servis
Bağlantı ayarları web.config’de yapılıyor.
WCF Servisi oluşturmak için
New | Project | WCF arama kutusuna yazdık | WCF Service Application | isim:islemler |OK.
İki tane class var. Biri Interface diğeri class.
Interfacede attributelerle yetki tanımı yapılmış. Bir classa implement edildiğinde o class WCF özeliği gösteriyor.
Interfacede methodu değiştirdik.
String Mesaj(string adi, string soyadi);
Serviceà Class’a geldik. Sağ tıklayıp implement. metodu oluşturdu.
İçine return adi+” “+soyadi;
Webserviste svc dosyası geliyordu.
Service.svc dosyasına baktık.
Şu yoldan şu classı bul.
Webconfig dosyasına gidiyoruz.
Bir bindinge ihtiyacı var.
Çalıştırınca localhostta açıldı. Method’a tıkladık.
Soap.txt’den bir şey copy-paste ettik web configin içine. Birazdan buraya yapıştıracağım.
IService.cs dosyası  (Interface)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace Islemler
{
// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.
    [ServiceContract]
publicinterfaceIService1
    {
        [OperationContract]
string Mesaj(string adi,string soyadi);
//[OperationContract]
//CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
    }
Service1.svc.cs dosyası
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace Islemler
{
// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.
publicclassService1 : IService1
    {
publicstring Mesaj(string adi, string soyadi)
        {
return adi + ” ” + soyadi;
        }
    }
}
Webconfig
<?xmlversion=”1.0″?>
<configuration>
<system.web>
<compilationdebug=”true”targetFramework=”4.0″ />
</system.web>
<system.serviceModel>
<services>
<servicename=”Islemler.Service1.svc.cs”>
<endpointname=”DenemeEndPoint”address=””binding=”basicHttpBinding”
contract=”Islemler.IService1.cs”>
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!– To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment –>
<serviceMetadatahttpGetEnabled=”true”/>
<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>
<serviceDebugincludeExceptionDetailInFaults=”false”/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironmentmultipleSiteBindingsEnabled=”true” />
</system.serviceModel>
<system.webServer>
<modulesrunAllManagedModulesForAllRequests=”true”/>
</system.webServer>
</configuration>
Webconfigdeki adres ve binding hazırlıyoruz.
Hangi classın hangi içeriğindeki methodu alacağız.
Kontratı düzenledik. Servisi görebilmek için bir yerde kullanmamız lazım.
Bir uygulama açıyoruz. Empty WebSite
Sitenin kod kısmına public Data Set diye başlayan yeri yapıştırdık.
Metodu tanımladık.
Public string Mesaj(string ad, string soyad)
{
}
Servisi çalıştırdık. Adresi kopyaladık ve web sitenin içinde referans ettik yapıştırdık. Namespace IslemClient ile servisi bağladık.
IslemlerClient.ServiceClient a=new IslemlerClient.ServiceClient();
Response.Write(“tolga”,”ayas”);
ABCà Webconfig’de tanımlanıyor. Şu class’ı kullan. Endpointini tanımlıyoruz.
WCF’de bir de katman mimarisi yapılmış.
Web Servisi katmanı
Interface Katmanı–à metodlar var contractlar
Ve class—interfacede tanımlanan metodların tanımlandığı kısım. InterfaceClass’ın implement edilmiş hali.
Veritabanından bilgi webservise geliyor.
Yukardaki açıklamalara ait kodları daha sonra yapıştıracağım.
Örnek: Bir Web Servisi: Kodlar tam deği
New | Project | WCF Service Application | İşlem2
Interface Iservice1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data;
namespace Islem2
{
// NOTE: You can use the “Rename” command on the “Refactor” menu to change the interface name “IService1” in both code and config file together.
    [ServiceContract]
publicinterfaceIService1
    {
        [OperationContract]
double UstAl(double s1,double s2);
        [OperationContract]
List<Ogrenci> OgrenciGetir();
        [OperationContract]
string[] metin(paramsstring[] ad);
        [OperationContract]
void OgrenciEkle(string ad, string soyad);   
    }
// Use a data contract as illustrated in the sample below to add composite types to service operations.
//[DataContract]
//public class CompositeType
//{
//    bool boolValue = true;
//    string stringValue = “Hello “;
//    [DataMember]
//    public bool BoolValue
//    {
//        get { return boolValue; }
//        set { boolValue = value; }
//    }
//    [DataMember]
//    public string StringValue
//    {
//        get { return stringValue; }
//        set { stringValue = value; }
//    }
//}
}
Service1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace Islem2
{
// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.
publicclassService1 : IService1
    {
publicdouble UstAl(double s1, double s2)
        {
returnMath.Pow(s1,s2);
        }
publicList<Ogrenci> OgrenciGetir()
        {
OkulDataContext data = newOkulDataContext();
var sonuc = from p in data.Ogrencis
select p;
return sonuc.ToList();
        }
publicstring[] metin(paramsstring[] ad)
        {
return ad;
        }
publicvoid OgrenciEkle(string ad,string soyad)
        {
Ogrenci bilgi = newOgrenci()
            {
                ad = ad,
                soyad = soyad
            };
OkulDataContext data = newOkulDataContext();
            data.Ogrencis.InsertOnSubmit(bilgi);
            data.SubmitChanges();
        }
    }
}
WebConfig dosyası
<?xmlversion=”1.0″?>
<configuration>
<connectionStrings>
<addname=”DenemeConnectionString”connectionString=”Data Source=.;Initial Catalog=Deneme;Integrated Security=True”
providerName=”System.Data.SqlClient” />
</connectionStrings>
<system.web>
<compilationdebug=”true”targetFramework=”4.0″ />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!– To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment –>
<serviceMetadatahttpGetEnabled=”true”/>
<!– To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information –>
<serviceDebugincludeExceptionDetailInFaults=”false”/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironmentmultipleSiteBindingsEnabled=”true” />
</system.serviceModel>
<system.webServer>
<modulesrunAllManagedModulesForAllRequests=”true”/>
</system.webServer>
</configuration>
Text sayfasını açıp denedik. Bunu uygulamaya nasıl monte edecez. Servis çalıştı. Adresi kopyladık.
Uygulamaya geçtik | Add Service Reference | ekledik.
Design bölümüne geldik.
textBox ekledik. Bir button ekledik, bir de label.
Ramazan CESUR