Posts Tagged :

wcf

PHP’ de WCF Servis Çalıştırmak 800 421 mezo

PHP’ de WCF Servis Çalıştırmak

Merhaba arkadaşlar

WCF Servisi yazdık yayınladık. C# tarafında nasıl kullanmamız gerektiği zaten basit olarak servisin üzerindeki örnek kısmında yazıyor. Bu yazıda .Net de yazdığımız bir metodun farklı bir platform olan PHP tarafında nasıl kullanacağımızı kısaca göstermek istiyorum.  Öncelikle kodlara geçmeden önce belirtmeliyim ki server üzerinde SOAPCLIENT kurulu olmalı eğer kurulu olmazsa WCF servisi kullanamazsınız.

WCF Servis tarafında aşağıdaki gibi bir metot yazdım

    public string AddAccount(string yetkiliAd,string yetkiliSoyad,string firmaAdi,string firmaAdresi){

return string.Format(“You entered: {0}”, yetkiliAd+yetkiliSoyad+firmaAdi+firmaAdresi);

}

Şimdi gelelim PHP kodlarına basit olarak kodlar şöyle:

// SOAP client WCF servis e bağlanmamızı sağlayan bir class ve WCF servis üzerindeki metotların çalıştırılmasını sağlar.
$wsdl = ‘http://servisadresi/ServisKlasoru/Service.svc?wsdl’;
$soapClient = new SoapClient($wsdl, array(‘cache_wsdl’ => 0));// Yazılan WCF servis üzerinde AddAccount adında bir metot var ve onun içersine parametreleri gönderiyoruz.
$AccountParameter = new stdClass();
$AccountParameter->yetkiliAd = addslashes($this->ucwords_tr($_POST[Ad]));
$AccountParameter->yetkiliSoyad = addslashes($this->ucwords_tr($_POST[Soyad]));
$AccountParameter->firmaAdi = addslashes($this->ucwords_tr($_POST[FirmaUnvan]));
$AccountParameter->firmaAdres = addslashes($this->ucwords_tr($_POST[FirmaAdres]));
try
{
// ve WCF servis üzerindeki AddAccount metodunu çalıştırım sonucu bir değişkene aktarıyor.
$result = $soapClient->AddAccount($AccountParameter);
}
catch (SoapFault $fault)
{
//echo “Fault code: {$fault->faultcode}” . NEWLINE;
//echo “Fault string: {$fault->faultstring}” . NEWLINE;
if ($soapClient != null)
{
$soapClient = null;
}
exit();
}
$soapClient = null;

//echo ”

\n”;

//print_r($result);

//echo ”

\n”;

//echo “Return value: {$result->AddAccountResult}” . NEWLINE;

Umarım yararlı olmuştur 😉

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service IIS Ayarları 1024 575 mezo

WCF Service IIS Ayarları

Merhaba arkadaşlar

Bir önceki yazıda WCF servisin ne olduğu ile alakalı bilgi vermiştim şimdi ise yazdığımız bir servisin IIS üzerinde nasıl yayınlanacağı üzerinde duralım. Öncelikle yayın yapacağımız server üzerinde IIS yüklü olması gerekmekte. IIS üzerinden bazı ayarlar yapacağız ve dosyalarımızı yerleştirip yayına başlayacağız.

Dosyalar demişken WCF Service projesini yazıp tamamladıktan sonra projeyi Publish etmemiz gerekiyor. Publish işlemi servisi yayına hazırlamak anlamına geliyor ve yapmasıda çok basit sadece projeniz üzerinde sağ click sonra publish seçmeniz yeterli.

Şimdi server üzerinde IIS Yöneticisini açıyoruz.

1

 

Daha sonra kullanacağımız Framework versiyonunda bir Application Pool ekliyoruz

2

 

Bizim servisimiz .Net Framework 4.0 kullandığı için uygulama havuzumuz Framework 4.0 seçip oluşturuyoruz.

3

Bu uygulama havuzu içersinede bir web sitesi ekliyoruz ki yayınlayacağımız servisimizi içersine yerleştirebilelim 🙂
4

 

Bu websitesinin yayınlanacağı fiziksel adresi seçmemiz gerekiyor.

5

6

 

 

7

 

Web sitesini ekledikten sonra ve fiziksel yolunu belirttikten sonra eklediğimiz web sitesine bir Application (uygulama) ekliyoruz.

8

 

Uygulamamız içinde aynı şekilde bir fiziksel yol seçtikten sonra yayına hazırız.

9

 

Artık servisimiz yayına hazır tek yapmamız gereken server in adresini yazmak ve belirttiğimiz servisin klasör adı ve dosya adını yazıp servisimizi görüntülemek 😉

http://serveradres veya ip adresi/ServisKlasoru/Service.svc

Untitled picture

 

Umarım yararlı olur

Bilgiyle Kalın

M.Zeki Osmancık

WCF Service Nedir? 448 274 mezo

WCF Service Nedir?

Merhaba arkadaşlar

WCF Service nedir konusu üzerinde bir kaç basit açıklama yapmak istiyorum. Bilindiği gibi microsoft bugüne kadar dağıtık uygulamalarının (Distrubuted Applications) geliştirilebilmesi için  .Net Remoting, XML Web Servisleri, MSMQ,COM+ gibi sistemleri geliştirmiştir.  WCF Service de temel olarak bu sistemlerin hepsinin yeteneklerine sahip ve tam SOA (Service Oriented Architecture – Servis Yönelimli Mimari) desteü, sağlayan güçlü bir Framework API si olarak açıklanabilir.

WCF iki önemli özellik ile birlikte karşımıza çıkmakta: bunlardan birincisi Microsoft tarafındaki servislerin farklı platformlar tarafından ele alınabilmesidir (Interoperability) . Böylece karmaşık .Net tiplerini özel olarak Java ,Com gibi modelleri destekleyen platformlara dağıtabiliriz. Bu yüzdende Linuz ,Unix gibi sistemler servislerimizin birer tüketicisi olabilirler.

İkinci özellik ise Windows kısmında yapılan dağıtık modeller arasında var olacak olan entegrasyonlarının tek bir çatı altında toplanabilmesidir. Bu özellik dışında WCF Service  , CLR tiplerini birer servis olarak sunabilmemizi ve servisleri birer CLR tipi olarak kullanabilmemizi sağlayan bir mimari sunmaktadır.

WCF Service ‘e aynı makine içinde aynı process te yer alan farklı bir Application Domain üzerinden ,aynı makinede yer alan farklı bir process içindeki farklı Application Domain üzerinden , farklı bir makinedeki process içinde yer alan Application Domain üzerinden ulaşabiliriz. Client’ lar hangi Application Domain üzerinde olursa olsunlar servis ile olan iletişimlerini proxy nesnesi üzerinden sağlamak zorundadırlar.

İngilizce kaynaklarda WCF Service ‘in ABC sinden sıkça bahsedilmektedir. Bu ABC nedir alfabemi diye sorarsanız değil 😀 ABC Addresses Bindings Contracts anlamına gelen ve WCF in çekirdeğinde yer alan önemli kavramlardır.

Addresses : Bulunan her servis benzersiz bir adrese sahip olmalıdır Özellikle bir servis adresi servisin teri taşıma protokolü bilgilerinden oluşmalıdır. Servis yeri derken kastetmeye çalıştığım şeyler aslında : Bilgisayar adı, site adı i network , iletişim portu, pipe queue, URI adları ve kesin bir path adresi   olarak sıralanabilir. Burada kullanılan taşıma protokolleri ise HTTP , TCP, P2P , IPC , MSMQ olarak soralanabilir.

Contracts : Bir servisin ne iş yaptığını bilmek önemlidir. Özellikle client’ ların ihtiyaç duyduğu proxy sınıflarının yazılmasında önemli bir konudur. Bu sebeple WCF Service üzerinde tüm servisler dış ortama bir Contract sunmaktadır. Genel manada 4 tane contract tipi vardır. bunlar

Service Contract : Serviste hangi operasyonların var olduğu ile alakalı sözleşmedir.

Data Contract :Servislerden client ‘lara giden ve client ‘ lardan servise gelen veri tiplerini tanımlayan sözleşmedir. Int String gibi bilinen tipler için bu sözleşmeler Implicit yani bilinçsiz olarak hazırlanır. Ancak karmaşık tiplerde ve kendi oluşturduğumuz tiplerde Explicit olarak tanımlanmaları gerekir. Bu sayede Java vb platformlara kendi tanımladığımız sınıfı o platformların anlayacağı şekilde sunmuş oluyoruz.

 Fault Contract : Servis tarafından hangi hataların fırlatılabileceğini ve bu servisi kullanan client a bu hataların nasıl aktarılacağını tanımlayan sözleşmedir.

Message Contract : Servislerin mesajları ile iletişimini sağlayan sözleşmedir.

Bindings :Bindings temek olarak servisleri ile nasıl iletişim kurulacağını tanımlamak için kullanılırlar. Bir bindings tip  transport type , protocok ve data encoding bilgilerini bildirir. Bu bilgiler aslında servis yönelimli mimari modelde kullanılabilecek olan senaryolar düşünülerek oluşturulurlar bu yüzdende WCF bu önceden bilinen senaryoları kullanabilmek için gerekli bağlayıcı tipleri önceden bildirmiştir bunlar :

 

Binding Tipi KonfigurasyonElementi Taşıma Çeşidi(Transport Type) Veri Çözümlemesi(Data Encoding) PlatformDesteği

(Interoperability)

BasicHttpBinding <basicHttpBinding> HTTP / HTTPS Text Var
NetTcpBinding <netTcpBinding> TCP Binary Yok
NetPeerTcpBinding <netPeerTcpBinding> P2P Binary Yok
NetNamedPipeBinding <netNamedPipeBinding> IPC Binary Yok
WSHttpBinding <wsHttpBinding> HTTP/HTTPS Text/MTOM Var
WSFederationBinding <wsFederationHttpBinding> HTTP/HTTPS Text/MTOM Var
NetMsmqBinding <netMsmqBinding> MSMQ Binary Yok
MsmqIntegrationBinding <msmqIntegrationBinding> MSMQ Binary Var
WSDualHttpBinding <wsDualHttpBinding> HTTP Text/MTOM Var

Buradaki tiplerden hangisini seçeceğimiz, geliştireceğimiz SOA (Service Oriented Architecture) modelindeki ihtiyaçlarımız doğrultusunda belirlenebilirler.

Şimdi isterseniz bir WCF Service projesi açarak inceleyelim.

WCF Service projesi açtığımızda bizi karşılayan önemli 3 dosya vardır bunlar IService.cs ,Service.cs ,web.config dosyalarıdır bu dosyalarda neler var bir bakalım.

IService.cs

Bu interface servis içersinde kullanılacak olan metotları property leri ve bunların contractlarının belirtildiği dosyadır 😉

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// 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]

public interface IService1

{

[OperationContract]

string GetData(int value);

[OperationContract]

CompositeType GetDataUsingDataContract(CompositeType composite);

// TODO: Add your service operations here

}

// 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; }

}

}

}

 

 

Service.cs

Service.cs ise işlemlerimizin IService.cs dosyasındaki gibi tanımlanmış olan metotlar içersine yazacağımız dosyamızdır.

using System;using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Web;

using System.Text;

namespace WcfService1

{

// NOTE: You can use the “Rename” command on the “Refactor” menu to change the class name “Service1” in code, svc and config file together.

// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.

public class Service1 : IService1

{

public string GetData(int value)

{

return string.Format(“You entered: {0}”, value);

}

public CompositeType GetDataUsingDataContract(CompositeType composite)

{

if (composite == null)

{

throw new ArgumentNullException(“composite”);

}

if (composite.BoolValue)

{

composite.StringValue += “Suffix”;

}

return composite;

}

}

}

 

Web.config

<?xml version=”1.0″?><configuration>

<system.web>

<compilation debug=”true” targetFramework=”4.0″ />

</system.web>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!– To avoid disclosing metadata information, set the value below to false before deployment –>

<serviceMetadata httpGetEnabled=”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=”false”/>

</behavior>

</serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />

</system.serviceModel>

<system.webServer>

<modules runAllManagedModulesForAllRequests=”true”/>

<!–

To browse web app root directory during debugging, set the value below to true.

Set to false before deployment to avoid disclosing web app folder information.

–>

<directoryBrowse enabled=”true”/>

</system.webServer>

</configuration>

 

Umarım yararlı olur.

Bilgiyle Kalın

M.Zeki Osmancık

 

    Join our Newsletter

    We'll send you newsletters with news, tips & tricks. No spams here.