Merhaba Arkadaşlar;
WPF uygulamalarında WCF servisini nasıl kullanabileceğimizi ve aslında normal bir Console uygulamasından çok da farklı olmadığını, sadece ufak bir fark olduğu sizlere göstermek istiyorum. Öncelikle bir WCF Library yaratıp normal bir Toplama işlemi yapacak olan Servis ve Operasyon sözleşmelerimizin olduğu Interface'imizi ve daha sonra bu interface den implemente edilecek olan class'ı yaratıp en son olarak ta bu servisi WPF tarafında kullanıcaz.
Hazır olarak gelen servis şablonundaki bütün yorum atırlarını ve bizim için yaratılmış olan kodların hepsini silelim. Temiz bir şekilde ilk olarak IService interface'imizde toplama işlemini yapacak olan metotu yazalım ve Service.cs yi bu interface den implemente edelim.
IService.cs
using System.ServiceModel;
[ServiceContract]
publicinterfaceIService1
{
[OperationContract]
double Topla(double x, double y);
}
Service.cs
Servisimiz ile ilgili yapılması gereken başka bir şey yok. WCF Library olarak servisimizi geliştirdiğimiz için, Default ayarlar .config dosyamızda mevcut, ancak yinede kontrol edebilmeniz açısından aşağıda bu dosyamızın içeriğinide veriyorum.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="WcfServiceLibrary1.Service1">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
</baseAddresses>
</host>
<endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Servisimizi Host edecek lan WPF uygulamızı, projemize ekliyoruz.
WPF uygulamasına, biraz önce yarattığımız servisimizi Add Service Referance diyerek, bu uygulamamıza referans olarak atıyoruz.
Servisimiz ve uygulamamız ayn Solution da olduğu için, Discover diyerek bu servisimize rahat bir şekilde ulaşabiliriz.
Bu işlemlerden sonra yapmamız gereken, servisimizin Client nesnesini oluşturup, referans olarak eklediğimiz servise bu nesne üzerinden erişip, servisimizin alması gereken parametreleri göndermek olacaktır. Bu işlem için, 2 adet TextBox, bir Button ve sonucu gösterek Label'ı MainWindow.xaml üzerine ToolBoxdan sürükleyip bırakmak. Buttun'un evet'ına parametreleri gönderecek ve sonucu gösterecek olan kodumuzu yazmak.
ToplamaServisi.Service1Client client = new ToplamaServisi.Service1Client();
double sonuc = client.Topla(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text));
label1.Content = sonuc.ToString();
Web veya Windows forms dan farklı olarak burada Label'ın Text özelliğinin olmaması ve onun yerine Content Property'nin olması.
Bu örnekte basit bir işlem yapmak istedim, özellikle yeni başlayan arkadaşlar için. WPF ile Entity Framework kullanımları ve .NET'e özgü tipler üzerinden yine örnekleri sirteden takip edebilirsiniz.
İyi Çalışmalar.