Katmanlı Mimari ve Platformlar Arası Haberleşme Üzerine

Kategori: Genel Programlama
Tarih: 3rd Mayıs 2013

Bazen bir projede birden fazla platform ile haberleşmeniz gerekebilir. Bu bazen zorunluluktan bazen de sistemin tasarımından kaynaklanır. Mesela katmanlı mimari kullanarak bir sistem geliştirdiğinizi varsayalım. 1. katman data access layer burada veriyi veritabanından bağımsızlaştırırsınız. 2. katman business Access layer burdada veriyi istediğiniz formatlarda sınırlar ve kullanıcıdan parametre olarak isteğiniz formatlarda alırsınız (sorrugate tipler). 3. Katman ise artık size kalmış burada direk bir Windows form yada wpf ile uygulama geliştirebilirsiniz.

3n.jpg

Ama fonksiyonel olan 3. Katman olarak bir servis yazmaktır. Daha sonra platformu ne olursa olsun uygulamamızda bu servisi referans ederek yine uygulamamızı geliştiririz. Mesela hem android bir cihazdan hem bir web sitesinden hemde masaüstü uygulamasından aynı servisi kullanırız. 3 platformda da bir butona basınca servisin ilgili methodu çalıştırılır. Bütün bu uygulamalar bizim sistemimizin bir istemcisi olur. Bir hata mesajını bile değiştirmek istesek bütün platformlarla teker teker uğraşmak yerine servisimizdeki method içinden değişlik yaparız ve tüm istemcilere artık o yeni hata mesajı gönderilir.

Aslında bir servis yazmak için hiçbir sınırınız yok. Soket programlama boyutunda verinizi istediğiniz formatta gönderip istediğiniz formatta okursunuz. Hatta gönderilen ve alınan veriyi şifreleyerek güvenliğide sağlayabilirsiniz. Ama yine fonksiyonel olan bir standart kullanmaktır. Wsdl (web service defination language) yani web servis tanımlama dili veri gönderip almanız için bir servis standartıdır. Bu şekilde bundan birkaç sene sonra çıkacak olan bir proglamlama dili yada framework bile olsa servisiniz ona da hizmet verebileceltir.

asd

Wsdl bir servis mimarisi değil mimari içinde kullanılan bir tanımlama dilidir. Mesela SOAP(Simple Object Access Protocol – Basit Nesne Erişim Protokolü) wsdl kullanan bir mimaridir. Biz wsdl ile bu servisin sunduğu fonksiyonları, onların gerek duyduğu parametreleri ve geri döndüreceği verileri belirleriz. Soap için örnek bir wsdl kodu aşağıdadır.


<?xml version='1.0' encoding='iso-8859-9'?>

<definitions name="server" targetNamespace="urn:server" xmlns:typens="urn:server" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:typens0="http://127.0.0.1/server.php">

<message name="ekle">

<part name="urunAdi"/>

<part name="aciklama"/>

<part name="marka"/>

<part name="fiyat"/>

<part name="taksit"/>

<part name="musterikodu"/>

</message>

<message name="ekleResponse">

<part name="ekleReturn"/>

</message>

<portType name="class.testPortType">

<operation name="ekle">

<input message="typens:ekle"/>

<output message="typens:ekleResponse"/>

</operation>

</portType>

<binding name="class.testBinding" type="typens:class.testPortType">

<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="ekle">

<soap:operation soapAction="urn:class.testAction"/>

<input>

<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

</input>

<output>

<soap:body namespace="urn:server" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

</output>

</operation>

</binding>

<service name="serverService">

<port name="class.testPort" binding="typens:class.testBinding">

<soap:address location="http://localhost/server.php"/>

</port>

</service>

</definitions>

Bu şekilde tanımlanmış bir servise php ile bağlanacağımızı düşünelim. Bağlantı kodu da aşağıdadır.


<?php

  $client = new SoapClient("http://localhost/siparis.wsdl", array('encoding' => 'ISO-8859-9'));
   echo $client->ekle($_POST['urunAdi'], $_POST['aciklama'], $_POST['marka'], $_POST['fiyat'], $_POST['taksit'], MUSTERISIFRE);

?>

İşte bu kadar basit. Ne veritabanı ne soket bağlantısı vs. hiçbirşeyle uğraşmadık. Sadece butona basılınca servise bağlandık ve fonksiyonu kullandık. Üstelik bu tüm platformlarda böyle basit.

Servis wsdl kullanıyorsa sorun yok. Ama wsdl kullanmayan bir servisiniz varsa bazı platformlarda sorun yaşabilirsiniz. Mesela Nufus ve vatandaşlık işleri bazı kurumlara protokol dahilinde bir Wcf açıyor. Üniversiteler, Valilikler gibi. Bu servise php bir projeden bağlanamazınız. Wcf in bi dolu avantajının yanında tek dezavantajı bu heralde. Bu seferde veriyi wcf den çekebilmek için bir ara masaüstü uygulaması yazmanız gerekir. Siz parametrelerinizi bu programa gönderirsinizi bu programda sizin yerinize wcf e bağlanır, verinizi ona gönderir gelen veriyide size iletir. Bu iş için C# ile geliştirilmiş uygulama kodları aşağıdadır.


static void Main(string[] args)

{

try

{

Service1SoapClient client = new Service1SoapClient();

TCDon[] veri = client.TCKimlik(args[0], args[1]);

Console.Write(veri[0]._ailesirano + "|" + Seo(veri[0]._adi) + "|" + Seo(veri[0]._soyadi));

}

catch (Exception ex)

{

Rapor.Yaz(ex);

}

}

Bu programı çalıştırıp veriyi geri okuyacak php kodu da aşağıdadır.


$tc = “..........”;
 $ip = “..........”
 $r = shell_exec('C:\.....\service.exe '.$tc.' ' . $ip);

Bu şekilde bir ara programla tüm platformlarda haberleşme sağlatılarbilir.

Bilişim Envanteri // Bir yazılımın anatomisi

Kategori: C#, Referanslar
Tarih: 19th Temmuz 2012

1. İhtiyaç Belirleme
Emekli olan, kurum değiştiren vs personelin bilgisayarları önlenemez şekilde el değiştiriyor. Demirbaş takibi güçleşiyor.

2. Analiz

İşleyiş: Yönetim panelinden bilgisayarlar ve parçalar, personellerle eşleştirilip zimmetlenecek. Panelden pasifleştirilen bilgisayarlar kullanılmayacak.

Yöntemler

  • Veritabanı olarak Mysql kullanılacak
  • Veri işlemede Entity Framework ve linq teknolojileri kullanılacak
  • WCF Service ile sunucu istemci iletişimi gerçekleştirilecek.

3. Tasarım ve Gerçekleme

Program gerçeklendikten sonra testleri yapılıp bir ftp sunucusuna deploy edilmiştir. Bu şekilde tüm yönetici ve istemciler güncellemeri otomatik olarak alacaklardır.

Önizleme:

Optimization WordPress Plugins & Solutions by W3 EDGE