WCF ile JSON haberleşmesi yapabilmek

WCF  Haziran 5, 2015

Merhaba, bu yazımda WCF ile SOAP servisinin dışında JSON ile de haberleşme konusunda temel bir çalışma yapacağız. Amacımız WCF uygulamalarını SOAP kanalında kullanırken aynı zamanda JSON kanalında da kullanabilmek. Yani bir taşla iki kuş vuracağız 😉

Hemen yeni bir proje oluşturarak olaya başlayalım, tabi isterseniz oluşturulmuşu var onu kullanın 🙂 https://github.com/halityurttas/wcfwithjson adresinden projemizi indirmeniz mümkün. Bu projeyi şablon olarak kullanabilirsiniz de. Bu yazımda sizin en az temel WCF bilgininiz olduğunu varsayarak yazıyorum. Yani WCF üzerine birşeyler okumuş olmanız gerek.

2015-06-05 13_33_56-WCFService - Microsoft Visual Studio

Servisimizin interface alanı, operasyon olarak GetData ile string döndüren bir fonksiyon var int tipinde de değer alıyor. Aslına bakarsanız az sonra ekleyeceğim resimde de görebileceğiniz gibi yazdığımız sayıyı bize döndürmekten başka bir iş yapmayacak.

2015-06-05 13_38_09-WCFService - Microsoft Visual Studio

Burada da yazdığımız sayıyı bize söyleyen basit bir fonksiyon öbeği bulunuyor. Her ne ise projeyi çalıştıralım bakalım. Yalnız çalıştırma işlemini yaparken servis dosyamızın içinde iken F5 yapmamızda fayda var client bu şekilde açılıyor.

2015-06-05 13_41_47-WCF Test Client

Açılan ekranda sol taraftaki ağaçtan GetData metoduna çift tıklayıp açtık. Sağda gelen kısma ise alınan değerler ve listesi gelmiş oldu. Pekala değer kısmına 5 yazıp Invoke tıkladığımızda dönen değer olarak “You entered: 5” yazan değeri almış olduk. Bir de altta ki sekmeden XML olayına bakalım.

2015-06-05 13_45_31-WCF Test Client

Evet gönderdiğimiz değer ve aldığımız değer burada gözükmekte. Bu noktada neden web sayfasından erişmedik diyebilirsiniz çünkü webden erişebilmek için bazı ayarların yapılması gerekiyor. Öncelikle interface dosyamıza girip OperationContract dan sonra veya önce pek fark etmez araya [WebGet] de eklememiz gerek. Ardından web.config dosyamızı şu şekilde yapılandırmalıyız.

<system.serviceModel>
 <behaviors>
 <serviceBehaviors>
 <behavior>
 <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
 <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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 -->
 <serviceDebug includeExceptionDetailInFaults="true"/>
 </behavior>
 </serviceBehaviors>
 <endpointBehaviors>
 <behavior name="WcfWeb">
 <webHttp/>
 </behavior>
 </endpointBehaviors>
 </behaviors>
 <protocolMapping>
 <add binding="basicHttpsBinding" scheme="https" />
 </protocolMapping> 
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
 <services>
 <service name="WCFService.Service1">
 <endpoint address="" behaviorConfiguration="WcfWeb" binding="webHttpBinding" contract="WCFService.IService1" />
 </service>
 </services>
 </system.serviceModel>

Burada behavior yapısına web den erişilebildiğini anlatmaya çalıştık. Tabi burada WCFService1 benim projenin assembly adı yani sizin projenin adı ne ise onu yazmanız gerek tabi IService1 de sizin kendi servis inrefaceniz olmalı. Buralara dikkat edip build ettikten sonra Solution Explorer’dan projemizin kök dizinine tıklayıp çalıştır yapıyoruz yoksa yine test client uygulamasında açılır. Web browser açıldıktan sonra servisimizi seçiyoruz. Ana görünüm wsdl filan için çıkıyor. Burada adres çubuğunun sonuna yani servis adımızın sonuna /GetData?value=1 yapıyoruz. Bakalım ne oluyor.

2015-06-05 14_06_43-Mozilla Firefox

Gördüğünüz gibi XML olarak artık browserimiz görüyor. Yalnız hala JSON olarak göremedik sonucu. Şimdi hemen interfacemize dönüp [WebGet] annotationunu [WebGet(ResponseFormat=WebMessageFormat.Json)] olarak değiştiriyoruz. Bu durumda tekrar denersek ekrana JSON gelecektir. Bende geldi bile 🙂

Peki şimdi nasıl hem json hem de xml olarak kullanacağız? Öncelikle web.config de ki WcfWeb behaviour unu bulup aşağıdaki automaticFormatSelectionEnabled şeklinde ki tabiri ekleyecez.

<behavior name="WcfWeb">
 <webHttp automaticFormatSelectionEnabled="true"/>
 </behavior>

Bundan sonra ki olay ise interface de ki [WebGet] annotationunu yine bu halde sadeleştiriyoruz. Bundan sonra ki aşamada kod gövdesini şu hale getirmeliyiz.

2015-06-05 14_27_39-WCFService - Microsoft Visual Studio

Burada manuel outgoing yani çıkış formatını ayarladık. Ancak isterseniz incomingrequest den gelen content type json ise json olsun gibi birşey diyebilirsiniz. Bir if kadar size yakın bir olay. Zaten bilirsiniz ki javascript json apileri (jquery vs) json olarak context göndermekteler. Sizde bundan faydalanarak çalışma zamanında dönecek değerin formatını değiştirebilirsiniz.

Bir başka yazımda görüşmek ümidiyle esenlikle…

Bu yazı 1496 defa görüntülendi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Yazar Hakkında

15 yıllık çalışma hayatında birçok proje geliştirmiş binlerce projeyi inceleme fırsatı bulmuş yazılım aşığıdır. İşini hobi olarak gören yazarımız iş hayatını profesyonelce zevkle sürdürmektedir.

Son Eklenenler