24 Şubat 2013 Pazar

Delphi PayPal Entegrasyonu ve Faizsiz Web Kartları


Malum PayPal web servisleri hazırladı. Bunlar için yüzlerce dökümanı sitesine koydu. Ebay ile işbirliği içinde olan PayPal'ın amacı programcılara web servisleri ile kolaylık sağlamak.  Bu yazımın girişimcilik ruhu yüksek Delphi Programcıları için faydalı olacağını düşünüyorum . Piyasaya yeni atılmış meslek erbapları, özellikle shareware mantığı ile program satmak isteyenler ya da remote worker olarak çalışmak isteyenler için kredi kartı kullanmak kaçınılmaz oldu. Çünkü sadece tüketici olarak internetten alışveriş değil, üretici olarak  e-iş yapmak için de 3D secure özelliği kredi kartları gerekiyor. Günümüzde bildiğimiz klasik faizli kredi kartları artık herkese verilmiyor ya da herkes bunları kullanmak istemiyor.  Piyasada bu açığı görmüş girişimci ruhlu bankalar piyasaya faizsiz kredi sundular.  Banklardan kredi kartı almak da zor, bu yüzden yeni piyasaya atılacak programcılara yeni çıkmış ve de pek te tanımayan, kullanıcının güvence verdiği için herkese kolaylıkla verilen faizsiz kartları tavsiye ediyorum.
Faizsiz kredi kartının temeli rehin akçesine dayanmaktadır.  Kolumuzdaki bilezik ya da yastık altındaki altının fiilen bankaya verilmesi  ya  da cebimizdeki  2.000-3.000 TL nin bankaya verilmesi karşılığında belirlenen süre içinde sadece verdiğimiz rehin akçesinin  bedeline karşı  düşen paranın kredi kartı kullanılmasıdır.  Yani bir nevi kumbarada biriktirdiğimiz parayı kendi kendimize kredi vererek internette kullanıyoruz. Bazı ülkelerde bu tip kredi kartları artık kredi kartı olmaktan çıkıp tamamen para garantisi sağladığı için  webcard  adı altında piyasaya çıkmıştır. 3D secure özelliği olan visa ve mastercard bu diğerleri de bu kart tipini destekliyor. Burada firma ismi vermem yakışık almaz ama siz googledan falan bulursunuz ve bu hizmeti verdiğini düşündüğünüz firmanın şartnamesini iyi okuyun. Darısı ülkemizdeki bankaların başına İnşaAllah..
Öncelikle Paypalda hesabınız yoksa bir paypal (merchant tüccar hesabı) hesabı açın. Paypal alışveriş ödemeleri için web servisleri kurmuş ve bunların dökümantasyonunu
http://www.x.com/ dan bulabilirsiniz. Bu siteye geliştirici olarak kayıt olun. Ve denemelerinize başlamak için öncelikle deneme hesabı almak için https://developer.paypal.com/ gidip kendinize hesab açın.
https://developer.paypal.com/cgi-bin/devscr?cmd=_login-done&login_access=0 adresinden kendinize test account ı açın. Ve bu bilgileri saklayın.

Paypal  ödemeleri kolaylaştırmak için bir takım uzaktan çağırılabilen fonksiyonlar sunmuştur. Öncelikle Paypal’ın API lerine kullanmak ve denemeler yapmak için Paypal’ın sitesinde bir hesap açmalısınız.
Program satışı dijital satışlara girdiği için Basic Digital Goods Payment sistemini seçiyoruz. Aşağıdaki adresten ilgili bilgilere ulaşabilirsiniz.

Bu adresteden yapmanız gerekenler adım adım anlatılmış.



Paypal  Geliştirici hesabıyla yapılanlara sandbox demiş. Sandbox kelimesine alışın dökümantasyonda sık sık kullanılacak.

Gelelim işin Delphi tarafına normal bir VCL projesş açın. File ->New->Other dan şekil 1 deki gibi WSDL importer seçeneğini seçin.





Gelen pencerenin .. Location of WSDL File or URLbsşlıklı yazım kutusuna şekil 2 deki gibi https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl  yazıp çıkan pencerelerde hep “Next”  butonlarına basıp Finish butonuyla bitirin.

Ana formmuza bir HTTPRIO componenti ekliyoruz. Bir buton ekliyoruz. Butonun click eventine aşağıdaki kodları yazıyoruz.

procedure TForm5.BitBtnPayPalClick(Sender: TObject);
var
Yolla:SetExpressCheckoutReq;
mik:BasicAmountType;
Gel:String;//SetExpressCheckoutResponse;
bamtyp:BasicAmountType;
begin

(*
   When testing in the sandbox, you need to be logged in at
   https://developer.paypal.com and maintain an active session.

   Bu programı çalıştırmadan ya gerçek hesabınızla ya da aldığınız geliştirici
   hesabıyla https://developer.paypal.com adresinde sisteme login olmanız gerekiyor.
   bunu dikkat edin yoksa login olmuyor
 *)
  APIUserName:=EditUser.Text;(*
   bu bizim deneme için aldığımız  kullanıcı adınız 'paypaldenemeadresim.hotmail.com' ile
   Lütfen bunu değitirin
   *)
  APIPassword:=EditPassword.Text;// '1355702278';
  APISig:=EditSignature.Text;//'A5ukx6CEG1S67x9TjnhSTaBwirQ.A-VWD0w9qj-1zih0LLHq2uzDUMC9';
  EndPointURL:='https://api-3t.sandbox.paypal.com/2.0/';  //https://api-3t.sandbox.paypal.com/2.0/
  APIemail:=EditSeller.Text;   //Paypaladresim@gmail.com bu bizim Paypal email adresimiz
  APILocalCode:='tr_TR';
  APIDoviz:='TRY';
  //USD diğer kodLAR https://www.x.com/developers/paypal/documentation-tools/api/currency-codes SAYFASINDA
  //Buna göreDÖVİZ KODLARINI combobox a koyabilirsiniz

      HTTPRIOSetC.HTTPWebNode.UserName:=APIUserName;
      HTTPRIOSetC.HTTPWebNode.Password:=APIPassword;
      HTTPRIOSetC.URL:=EndPointURL;

 mik:=BasicAmountType.Create;


  try
   Yolla:=SetExpressCheckoutReq.Create;
   mik.CurrencyID:=CUrrencyCodeType.TRY_;
   mik.Text:='7.0';
      try
      (HTTPRIOSetC as PayPalAPIAAInterface).SetExpressCheckout(Yolla);
       except
         on E: Exception do
         showmessage('Hata Soap SetExpressCheckoutReq func. POST: ' + E.Message);
       end;

   finally
   Yolla.Free;
   end;


if TOKENReturned<>'' then begin  //başarılı dönüşte kod dolu çıkar

  shellexecute(0,'open',PWideChar('https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token='+TOKENReturned+'&useraction=continue'),
  '','',sw_maximize);

end;
end;
HTTPRIO componentinin onBeforeExecute eventine aşağıdaki kodu yazıyoruz.
Böylelikle PayPal web servisine gerekli olan bilgileri yolluyoruz.
procedure TForm5.HTTPRIOSetCBeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  StrList1: TStringList;
begin

  StrList1 := TStringList.Create;
  try
    SOAPRequest.Position := 0;
    StrList1.LoadFromStream(SOAPRequest);
    if MethodName = 'SetExpressCheckout' then
    begin
      StrList1.Clear;
        StrList1.Add('<?xml version="1.0" encoding="UTF-8"?>');
        StrList1.Add('<SOAP-ENV:Envelope xmlns:xsi= "  http://www.w3.org/2001/XMLSchema-instance"');
                  StrList1.Add('xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"');
                  StrList1.Add('xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"');
                  StrList1.Add('xmlns:xsd="http://www.w3.org/2001/XMLSchema"');
                  StrList1.Add('SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">');

  //**************header****
      StrList1.Add('<SOAP-ENV:Header>');
                StrList1.Add('<RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">');
                        StrList1.Add('<Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">');
                                   StrList1.Add('<Username>'+APIUserName+'</Username>');
                                   StrList1.Add('<Password>'+APIPassword+'</Password>');
                                   StrList1.Add('<Signature>'+APISig+'</Signature>');
                                   StrList1.Add('<Subject>'+APIemail+'</Subject>');
                        StrList1.Add('</Credentials>');
              StrList1.Add('</RequesterCredentials>');
      StrList1.Add('</SOAP-ENV:Header>');
  //**************header****

      StrList1.Add('<SOAP-ENV:Body>');
      StrList1.Add('<SetExpressCheckoutReq xmlns="urn:ebay:api:PayPalAPI">');
            StrList1.Add('<SetExpressCheckoutRequest>');
                StrList1.Add('<Version xmlns="urn:ebay:apis:eBLBaseComponents">87.0</Version>');
                StrList1.Add('<SetExpressCheckoutRequestDetails xmlns="urn:ebay:apis:eBLBaseComponents">');

                   StrList1.Add('<ReturnURL>http://localhost/PerksXpress/Order/Summary.aspx</ReturnURL>');
                  //  Kullanıcı kullanıcı ok derse retun adresine geliyor cancel ettiğinde cancel adresine geliyor
                    StrList1.Add('<CancelURL>http://localhost/PerksXpress/Order/Details.aspx</CancelURL>');
                    StrList1.Add('<NoShipping>0</NoShipping>');
                    StrList1.Add('<LocaleCode>'+APILocalCode+'</LocaleCode>');
                    StrList1.Add('<PaymentAction>Sale</PaymentAction>');
                    StrList1.Add('<PaymentDetails>');
                  // bunu buraya ekleyince detail göstermedi  StrList1.Add('<LocaleCode>tr_TR</LocaleCode>');
                   StrList1.Add('<OrderTotal currencyID="'+APIDoviz+'">1.0</OrderTotal>');
                   StrList1.Add('<ItemTotal currencyID="'+APIDoviz+'">1.0</ItemTotal>');


      StrList1.Add('<PaymentDetailsItem> <Name>Aydiem Ticari Program</Name>');

      StrList1.Add('<Quantity>1</Quantity>');
      StrList1.Add('<Tax currencyID="'+APIDoviz+'">0.0</Tax>');
      StrList1.Add('<Amount currencyID="'+APIDoviz+'">1.0</Amount>');
      StrList1.Add('<Description>program</Description>');
      StrList1.Add('</PaymentDetailsItem>');
                         //gerekirse bu bilgilerde yollanır.
                        //StrList1.Add('<ShippingTotal currencyID="'+APIDoviz+'">0</ShippingTotal>');
                        //StrList1.Add('<HandlingTotal currencyID=""'+APIDoviz+'">1.75</HandlingTotal>');
                      //  StrList1.Add('<TaxTotal currencyID="'+APIDoviz+'">0</TaxTotal>');
                    //    StrList1.Add('<InvoiceID>00000000000000000000000000000000</InvoiceID>');
                      //  StrList1.Add('<InsuranceTotal currencyID="'+APIDoviz+'"0</InsuranceTotal>');
                      //  StrList1.Add('<ShippingDiscount currencyID=""'+APIDoviz+'">0</ShippingDiscount>');
                    StrList1.Add('</PaymentDetails>');
                StrList1.Add('</SetExpressCheckoutRequestDetails>');
            StrList1.Add('</SetExpressCheckoutRequest>');
        StrList1.Add('</SetExpressCheckoutReq>');

      StrList1.Add('</SOAP-ENV:Body>');
      StrList1.Add('</SOAP-ENV:Envelope>');

    end;

    SOAPRequest.Position := 0;
    StrList1.SaveToStream(SOAPRequest);
   // Memo2.Lines.Clear;       Memo2.Lines.AddStrings(StrList1);   Memo2.Lines.SaveToFile('soapyolla.xml');
  finally
    StrList1.Free;
  end;
end;

HTTPRIO componentinin onAfterExecute eventine aşağıdaki kodu yazıyoruz. Böylelikle Paypal servisinden gelen cevabı almış oluyoruz.
procedure TForm5.HTTPRIOSetCAfterExecute(const MethodName: string;
  SOAPResponse: TStream);
var
  StrList1: TStringList;
  AraSonuc,FailureOrSucces:AnsiString;
begin
  inherited;
  StrList1 := TStringList.Create;
  try
    SOAPResponse.Position := 0;
    StrList1.LoadFromStream(SOAPResponse);

    FailureOrSucces:=FindTagSoapStream(SOAPResponse,
   '<Ack xmlns="urn:ebay:apis:eBLBaseComponents">','</Ack>' );
     // SuccessWithWarning bu da var FailureWithWarning bu da
  if FailureOrSucces='Success' then begin
     AraSonuc:=FindTagSoapStream(SOAPResponse,
     '<Token xsi:type="ebl:ExpressCheckoutTokenType">',  //dikkaT  xsi:type="ebl:ExpressCheckoutTokenType KISIMLARI İÇİN > Lİ ifadeden sonrasını alamayı içieren bir önlem alabilrsin bı string değişirse problem olmasın
     '</Token>' );
       TOKENReturned:=AraSonuc;  //EC-0VW01016X17611820 2.EC-6MF036896Y5259617 token her seferinde değişiyor
       Edit1.Text:=TOKENReturned;
     end else Edit1.Text:='Ödeme Yapılamaz.'

 //    showMessage(TOKENReturned);
  finally
    StrList1.Free;
  end;

Function TForm5.FindTagSoapStream(const strName: TStream; tagBas: Ansistring; tagSon: Ansistring):Ansistring;
var
  fs: TStringStream;
  S,cevap: Ansistring;
  SonucBas,SonucSon,VarAy,VarOlm,jj:Longint;
begin

  try
  fs := TStringStream.Create;
  fs.LoadFromStream(strName);
    SetLength(S, fs.Size);
    fs.ReadBuffer(S[1], fs.Size);
  finally
    fs.Free;
  end;


  SonucBas:=-1;
  SonucSon:=-1;
SonucBas:=Pos(tagBas,s);
SonucSon:=Pos(tagSon,s);

cevap:=Copy(s,SonucBas+Length(tagBas), SonucSon-(SonucBas+Length(tagBas)));
//Showmessage(cevap+' '+InttoStr(SonucBas)+' '+InttoStr(SonucSon) + ' taguzun'+IntToStr(Length(tagBas)));
Result:=cevap;
end;

Paypalden hesabınıza bağış yapılmasını istiyorsanız aşağıdaki kodu kendi adresinizle değşitirip kullanın.

procedure TForm5.BtnBagisClick(Sender: TObject);
var
donationAddress:String;
begin
donationAddress :=
    'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=ayse93'+
    '%40hotmail%2ecom%2etr&item_name=Makaleler&no_shipping=0&no_note=1'+
    '&tax=0&currency_code=USD&lc=TR&bn=PP%2dDonationsBF&charset=UTF%2d8';
     ShellExecute(0,'open',PWideChar(donationAddress), NIL, NIL, SW_SHOWNORMAL);
end;
Kodlar için  (DelphiPayPal.rar) tıklayınızİnşaAllah işinize yarar. Faydalı Soru ve Yorumlarınızı bekliyorum.


14 Kasım 2012 Çarşamba

Delphi ‘de Web servisleri ve SOAP Uygulamaları


Giriş
Web Servisleri Internet üzerinden yayınlanan ve çağrılabilen bağımsız modüler uygulamalardır. Web servisleri sağlanan hizmetleri açıklamak için iyi tanımlanmış ara yüzler sağlar. Istemci gözatıcılar için Web sayfaları üreten Web sunucusu uygulamalarının aksine, Web Servisleri doğrudan insan etkileşimi için tasarlanmış değildirAksine, bunlara istemci uygulamaları tarafından programlama yoluyla erişilir.

Web servisleri istemci ve sunucu arasında serbest bir bağlantı sağlamak için tasarlanmıştırYanisunucu uygulamalarının istemcileri belirli bir platform ya da bir programlama dili kullanma ihtiyacı duymaz. 
Dilin doğal tarzında, arayüz tanımlamaya ek olarak çoklu iletişim mekanizması da tasarlamaya izin verir.
Web servisleri, SOAP (Basit Nesne Erişim Protokolü) kullanarak çalışmak üzere tasarlanmıştır. SOAP merkezi olmayan, dağıtılmış bir ortamda bilgi değişimi için standart hafif bir protokoldür. Uzak yordam çağrıları kodlamak için XML kullanır ve genellikle bir iletişim protokolü olarak HTTP kullanır. SOAP hakkında daha fazla bilgi için, http://www.w3.org/TR/SOAP/  adresindeki SOAP spesifikasyonuna bakın.

Not: Web servislerini destekleyen bileşenler(componentler) SOAP ve HTTP kullanacak şekilde inşa edilmiş olmalarına rağmen,frameworkun(çerçevenin)diğer kodlama ve iletişim protokollerini kullanacak şekilde genişletilecek kadar yeterince geneldir.
Delphi SOAP tabanlı Web Servis uygulamalarını (sunucu) size inşa etmenize izin vermesi yanında , özel bileşenler ve sihirbazlar size web servisleri için istemciler inşa etmenize ya SOAP ya da  belge birebir stili kullanıarak size izin verir . Belge birebir stili .Net Web Hizmetlerinde kullanılır.
Web servis  uygulamaları arayüzlerde ne bulunduğu bilgisini ve bunları WSDL (Web Service Definition Language-web servisi tanmlama dili) kullanarak nasıl çağırılacağı bilgisini yayınlar.  Sunucu tarafında, uygulamanız bir Web servisinizi tanımlayan bir WSDL dokümanı yayınlayabilir.  İstemci tarafında, bir sihirbaz veya komut satırı yardımcı programı , ihtiyacınız olan bağlantı bilgisini ve ara yüz tanımlarını size sunarak bir yayınlanmış WSDL dökümanı ithal edebilir.  Zaten uygulamak istediğiniz Web sunucusunu  tanımlayan WSDL belgesi varsa WSDL belgesi alırken, siz de sunucu taraflı kodu oluşturabilirsiniz
 ve SOAP istemci ve sunucu taraflı program yazabilirsiniz.
SOAP  Demosunu İnşa Edelim
Bu konuda çok detaya girmeden sunucu ve istemci yazılımını yazmak faydalı olacaktır Biri server uygulaması ve diğeri client tarafı uygulaması olmak üzere iki uygulama hazırlayacağız. Bunun için .groupproj uzantılı grup oluşturup bu dosyada, bu iki exe yi barındırmak dizayn açısından bize kolaylık sağlayacaktır.
Server tarafı
Uzak bağlantıların erişip çalıştıracağı, uzak fonksiyonları server tarafında barındıryoruz. Bunun için Delphi 2009 ve sonrası için direkt File > New > Other > Delphi Projects > Web Services > SOAP Server Application seçilir Şekillerdeki adımlar sıra ile yapılır.






Şekil -4 teki code generation kısmını işaretlerseniz otomatikman örnek yordamlar ve 3 adet delphi uniti oluşuyor.

Bu diyolagtaki seçeneklerin açıklması aşağıda verilmiştir.
Madde
Açıklama
Service name (Servis Adı)
İstemcilere göstermek istediğiniz web servisin çağırılabilir arayüzünün adını girin. Bu ad ara yüz adı olarak kullanılır. Aynı zamanda uygulama sınıfı adını oluşturmak için kullanılır. Bu nedenle, örneğin, MyWebService  yazarsanız wizard MyWebService adlı çağırılabilir arayüz oluşturur ve uygulama sınıfı  TMyWebServiceImpl olarak adlandırılır.
Unit identifier (Birim tanımlayıcı)
 Wizardın oluşturacağı ve uygulama sınıfı ve arayüzü içeren unitin adını girin.
Generate comments (yorumları oluştur)
İsteğe bağlı. Wizard tarafından oluşturulmuş unite kodun ne yaptığını anlatan yorumları ekler. Kullanıcılara kolaylık olsun anlaşılır olsun diye konmuş bu seçenek.
Generate sample methods (Basit yordamlar oluştur.)
İsteğe bağlı. Wizard tarafından oluşturulmuş unite, örnek kod ekler.  Bu kodu kullanabileceğiniz gibi uygulama sınıfı ve çağrılabilir ara yüzün uygulanması ve tanımlanması için bir kılavuz olarak kullanabilirsiniz.
Service activation model (Servis aktivasyonu modeli)
Drop-down listeden istediğiniz aktivasyon modelini seçin.
  • Per Request Seçeneği uygulamanız için aldığı her isteğe(request) karşı cevap vermek için uygumla sınıfınızın yeni örneğini oluşturur. İstek(request)         işlendikten sonra bu örnek istek(request) boşaltılır.
  • Global Object Tüm istekleri(request) işlemek için kullanacağınız uygulama sınıfının bir tek örneğini oluşturur.


Bunlardan WebModuleUnit1.pas uniti SOAP bileşenlerinin bulunduğu unittir.  Web servisi için gereken bir dağıtıcı ve bir çağırıcı (invoker): çığırılabilen (invokable) arabirimleri ve bunları uygulayan sınıflara ek olarak, sunucu iki bileşen gerekir. (Soap.WebBrokerSOAP.THTTPSoapDispatcher) gelen SOAP mesajları alır ve invoker onları aktarır. Invoker (Soap.SOAPHTTPPasInv.THTTPSoapPascalInvoker), SOAP mesaj yorumlaması onu çağıran invokable arabirimi tanımlar, çağrı yürütür ve cevap mesajı toplanır.

Not: THTTPSoapDispatcher ve THTTPSoapPascalInvoker bir SOAP isteği içeren HTTP mesajları yanıtlamak için tasarlanmıştır. Temel mimarisi farklı dispatcher ve invoker bileşenlerinin ikame ederek diğer protokolleri destekler, ve yeterince geneldir.
Sonra HTTP isteği mesajı SOAP eylem başlığında bu arabirimleri tanımlamak iletileri işlemek için otomatik invokable arayüzler ve uygulama sınıfları, dağıtıcı ve çağırıcıya (invoker) kayıt olur.

Web servisleri de bir yayıncı (Soap.WSDLPub.TWSDLHTMLPublish) içerir. Yayıncılar uygulamasında Web sevislerini aramak için açıklayıcı WSDL dokümanları oluşturarak gelen istemci isteklerine yanıt verir. Bu uygulama müşterilerine Web servisi tanımlayan WSDL belgeleri yayımlamayı sağlar. WSDL yayıncı hakkında bilgi için, bir Web servisi uygulaması için WSDL Belgeler oluşturur.


Tüm bunları yaptıktan ve açıkladıktan sonra bu hazır oluşan projeye bir de ADO bağlantısı ekleyelim. Bu WebModuleUnit1.pas unitinde eklediğimiz  ADOConnection1 componenti ile olsun.  Ki databaseden veri okumayı da öğrenmiş olalım. ADOConnection1.ConnectionStringi  webde açılacak databasein adına passwordune göre değiştirilmelidir..


Tüm bunlar sonucunda DemoSoapWebServer.dll oluşacaktır. Bu dll web hosta konacak web server olan dll.dir. 

Burada default olarak  WSDLHTMLPublish1 de http://localhost/ demosoap/ DemoSoapWebServer.dll /wsdl olarak tanımlanmıştır. DemoSoapWebServer.dll programı compile edildikten sonra  C:\inetpub\wwwroot\ demosoap klasörüne yüklenmelidir.Ama siz localhost yerine sitenizde de yayınlyabilirsiniz.

Ayrıca iis.exe çalıştırılıp bu dll in kaydı yapılmalıdır. Bunun için Denetim Masasından Yönetimsel Araçları seçip Internet Information Services (IIS) Yöneticisini çalıştırın. Şekil 5 teki gibi sanal dizin ekleyin.Ve şekil 6 da gösterildiği gibi uygulmaya dönüştürün.


iis de ISAPI ve CGI kısıtlamaları ve  iis de handeler mapping (işleyici eşlemeleri) bölümünden tanım yapılamalıdır. Bunlar aşağıda şekil 7,8-9 gösterilmiştir.





 

Eğer iis 7.0 ve üstü ise demosoap sanal dizinin altındaki web.config aşağıdaki gibi değiştirilmelidir. En azından handlers tagı.

<configuration>
    <system.webServer>
        <directoryBrowse enabled="false" /> 
      <handlers accessPolicy="Read, Write, Execute,Source, Script">
           <add name="IDemoSoapWebServer" path="DemoSoapWebServer.dll" verb="*" modules="IsapiModule" scriptProcessor="C:\inetpub\wwwroot\demosoap\DemoSoapWebServer.dll" resourceType="File" allowPathInfo="true" requireAccess="Execute" />

  </handlers>
    </system.webServer>
</configuration>

Tüm bunlar bittikten sonra internet göz atıcınızı açıp adres çubuğuna
http://localhost/demosoap/DemoSoapWebServer.dll/wsdl/ yazıp enter basın şekil 10 daki görüntü karşınıza çıkacaktır. Ekrandaki butona tıklanıp admin kaydı yapılmalı
Bunların görüntüsü de şekil 10-a-b-c de verilmiştir.





Sonrada IDemoSoapWebservisi yazan tarafı tıklanıp explorerdan save as ile C:\Users\aysen\Documents\IDemoSoapWebServisi.wsdl saklanmalıdır. Eğer netten yayınlanacak servisin olduğu yere Şekil 11 deki gibi kopyalanır. kopyalanır.




Client Tarafı Uygulama Projesinin Oluşturulması

Bu herhangi platformda olabilir. Ama yine Delphi’de gösterdik. Daha sonra bu grupa sağ tıklayıp new Project ile çıkan diyolagtan VCL Forms Application ekleyerek yeni projeyi DemoSoapClient.dpr olarak adlandırarak ekleyim. Sonra Şekil -12 de gösterildiği gibi File > New > Other > Delphi Projects > Web Services >WSDL Importer i seçelim. Sonra şekil 13 te gösterildiği gibi publish ettiğimiz .wsdl uzantılı dosyanın yolunu buradaki yazım kutucuğuna yazalım ve  User Name ve passworde windowsta admin hakkına sahip tanımlı kullanıcının user name ve passwordunu yazalım.  Böylelikle servisin tanımlı olduğu unit otomatikman oluşacaktır.





 Daha sonra ana formumuza tool paletteden bir HTTPRIO componenti ekleyelim. Bunun WSDLLocation özelliğne wsdl dökümanın yolunu yazalım. Şekil 14 de gösterilen HTTPWebNode özelliğin altındaki password ve username windows hesaplarında tanımlı olan
Kullanıcı adı ve passworunu yazıp,port ve service özelliklerinden ilgili port ve servisi seçelim.
Böylelikle web servisini kullanıma açmış oluruz.





İki adet butondan echoDouble uzak makinadaki echoDouble  fonksiyonu çağırır diğeri ise DB den veri okumayı gösteriyor.

procedure TForm2.BitBtn1Click(Sender: TObject);
var
GelenSayi:Double;
begin
GelenSayi := (HTTPRIO1 as IDemoSoapWebServisi).echoDouble(5);
MessageDlg(FloatToStr(GelenSayi),mtWarning,[mbOk],0);
end;

procedure TForm2.BitBtn2Click(Sender: TObject);
var
DBVeriPersonel:TMyEmployee;
begin
//web serverdaki veri tabanından veri okuyor.
DBVeriPersonel:= (HTTPRIO1 as IDemoSoapWebServisi).DBveriOku(1);
MessageDlg(DBVeriPersonel.FirstName+' '+DBVeriPersonel.LastName,mtWarning,[mbOk],0);

end;

 Kodları aşağıdaki linkten çekebilirsiniz.Kodları indir

ALLAH GÜZEL İSİMLERİ(ESMAÜL HÜSNA) VE KAİNAT VE KORONA VİRÜSÜNÜN HAYIRLI TARAFLARI

Kuranı kerimde Bakara 180 de"En güzel isimler Allah’ındır; bu güzel isimlerle O’na dua edin, O’nun isimleri hakkında doğru inançtan sap...