SOAP Web Servis Yaşam Döngüsü
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: SOAP Web Servis Yaşam Döngüsü
Uygun bir zaman bulunca bir örnek hazırlayıp burada paylaşırım.
Örnek bir ini dosyasını okuyup, her yeni thread'ind bu ini dosyasını açmadan ilk okunan veriyi paylaşatığı cinsten basit bir kurgu olacak.
Örnek bir ini dosyasını okuyup, her yeni thread'ind bu ini dosyasını açmadan ilk okunan veriyi paylaşatığı cinsten basit bir kurgu olacak.
Re: SOAP Web Servis Yaşam Döngüsü
Hocam valla böyle bir örnek gönderirseniz gerçekten beni büyük bi dertten kurtarmış olacaksınız.
Şimdiden teşekkür ederim.
Şimdiden teşekkür ederim.
Re: SOAP Web Servis Yaşam Döngüsü
Hocam ancak fırsatım oldu basit bir şekilde daha önce bildirdiğim INI projesini yaptım denedim beklediğim şekilde doğru çalıştı.
Projeyi bu linkten indirebilirsin.
Bence sen Tiger ile iletişiminde sorunu aramalısın.
- CLASS'ı şöyle yaptım. Sonuçları rahatça takip edebilmen için Form1 üzerindeki Memo1'e her adımı logladım.
iki adet Action tanımladım.
Birincisi /inioku
İkincisi /inikaydet?deger=string-ifade
İşlemi kendin de dene.
(1) Sunucu'yu çalıştır, START butonuna basarak aktif hale getir.
(2) Bir web browser aç oradan yaz.
(3) 1 nolu Action inioku devreye girecek ve daha önce xTiger nil olduğundan ilk defa create edilecek INI dosyadaki değer okunacak ve bir String değişkene depo edilecek. Aynı zamanda browser ekranında bu değeri response ederek sana gösterecek.
(4) kaç tane browser açarsan o kadar kere bu depo edilen değeri gösterecek ama INI dosyadan asla okumayacak.
(*) şöyle test edebilirsin. Sunucu çalışıyorken ve en az bir kere inioku demişken (xTiger create edilmiş ve depo edilmiş halde yani) INI dosyasını bir NoteDefteri ile açıp değeri elinle değiştir. Yine inioku dediğinde eski depo edilmiş değeri okuyacaksın. Bu da xTiger'in tutarlı olduğunun garantisi.
(5) 2 nolu action inikaydet'tir. yeni değer yazmak için browser'a şöyle yaz.
Bu da yeni verdiğin değeri INI'ye yazacak, aynı zamanda depo edilen değeri güncelleyecektir.
Şimdi konu daha da anlaşılır oldu umarım.
Projeyi bu linkten indirebilirsin.
Bence sen Tiger ile iletişiminde sorunu aramalısın.
- CLASS'ı şöyle yaptım. Sonuçları rahatça takip edebilmen için Form1 üzerindeki Memo1'e her adımı logladım.
Kod: Tümünü seç
tTigerHelper = Class (TObject)
private
FSonuc : String;
Function FSonucFunc: String;
procedure FKaydet( strDeger: String );
public
property Sonuc : string read FSonucFunc;
property Kaydet: string write FKaydet;
constructor Create;
destructor Destroy; Override;
End;
{ tTigerHelper }
constructor tTigerHelper.Create;
Var
INI : TINIFile;
begin
INI := TINIFile.Create( ChangeFileExt( ParamStr(0), '.INI' ) );
FSonuc := INI.ReadString( 'MAIN', 'Deger', '' );
INI.Free;
Form1.Memo1.Lines.Add('TigerHelper Create Edildi. Değer okundu... : "' + FSonuc + '"');
end;
destructor tTigerHelper.Destroy;
begin
Form1.Memo1.Lines.Add('TigerHelper Destroy Edildi. ');
Inherited;
end;
procedure tTigerHelper.FKaydet(strDeger: String);
Var
INI : TINIFile;
begin
INI := TINIFile.Create( ChangeFileExt( ParamStr(0), '.INI' ) );
INI.WriteString( 'MAIN', 'Deger', strDeger );
Form1.Memo1.Lines.Add('TigerHelper Değer yazıldı... : "' + strDeger + '"');
FSonuc := strDeger;
INI.Free;
end;
function tTigerHelper.FSonucFunc: String;
begin
Result := FSonuc;
end;
Birincisi /inioku
Kod: Tümünü seç
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if xTigerHelper = nil then
xTigerHelper := tTigerHelper.create;
Response.Content := 'INI Değeri = "'+ xTigerHelper.Sonuc + '" olarak okundu...';
Handled := True;
end;
Kod: Tümünü seç
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if xTigerHelper = nil then
xTigerHelper := tTigerHelper.create;
xTigerHelper.Kaydet := Request.ContentFields.Values['deger'];
Response.Content := 'INI Değeri = "'+ xTigerHelper.Sonuc + '" şeklinde yeniden yazıldı!!!';
Handled := True;
end;
(1) Sunucu'yu çalıştır, START butonuna basarak aktif hale getir.
(2) Bir web browser aç oradan
Kod: Tümünü seç
http://127.0.0.1:2048/inioku
(3) 1 nolu Action inioku devreye girecek ve daha önce xTiger nil olduğundan ilk defa create edilecek INI dosyadaki değer okunacak ve bir String değişkene depo edilecek. Aynı zamanda browser ekranında bu değeri response ederek sana gösterecek.
(4) kaç tane browser açarsan o kadar kere bu depo edilen değeri gösterecek ama INI dosyadan asla okumayacak.
(*) şöyle test edebilirsin. Sunucu çalışıyorken ve en az bir kere inioku demişken (xTiger create edilmiş ve depo edilmiş halde yani) INI dosyasını bir NoteDefteri ile açıp değeri elinle değiştir. Yine inioku dediğinde eski depo edilmiş değeri okuyacaksın. Bu da xTiger'in tutarlı olduğunun garantisi.
(5) 2 nolu action inikaydet'tir. yeni değer yazmak için browser'a şöyle yaz.
Kod: Tümünü seç
http://127.0.0.1:2048/inikaydet?deger=stringifade
Şimdi konu daha da anlaşılır oldu umarım.
Re: SOAP Web Servis Yaşam Döngüsü
Muharrem hocam Allah sizden razı olsun. Deneyip hemen haber vericem.
İnşallah yaptığınız örneği benim projeye uyarlayabilirim.
Çok teşekkür ederim hocam.
İnşallah yaptığınız örneği benim projeye uyarlayabilirim.
Çok teşekkür ederim hocam.
Re: SOAP Web Servis Yaşam Döngüsü
Muharrem hocam merhaba.
Sizin gönderdiğiniz örnek ile ben baya ilerledim. Hatta adoquery ile test filan yaptım aynen sizin yaptığınız gibi çalışıyor.
Fakat bu logo tiger'ın application nesnesi bir türlü olmadı.
İlk istekte sorun yok çalışıyor fakat ikinci istek geldiğinde hata dönüyor. Bunuda ilk istek yaparken görev yöneticisinden baktım tiger'ın application nesnesini çalışan uygulamalar arasına getiriyor sonrasında işlem bitince kapatıyor kendini. Ama benim hafızadaki xtiger1 olarak verdiğim nesne duruyor. Her istekte login olmamam için bu application nesnesinin hep login durumda ayakta olması lazım hocam.
Valla işin içinden çıkamadım.
Bu unityapplication nesnesini main forma alıyım dedim hocam bu seferde buradan form1 e erişmek istediğimde uygulama başka iş parçacığı için sıraya konmuş diye hata döndü.
Sizin gönderdiğiniz örnek ile ben baya ilerledim. Hatta adoquery ile test filan yaptım aynen sizin yaptığınız gibi çalışıyor.
Fakat bu logo tiger'ın application nesnesi bir türlü olmadı.
İlk istekte sorun yok çalışıyor fakat ikinci istek geldiğinde hata dönüyor. Bunuda ilk istek yaparken görev yöneticisinden baktım tiger'ın application nesnesini çalışan uygulamalar arasına getiriyor sonrasında işlem bitince kapatıyor kendini. Ama benim hafızadaki xtiger1 olarak verdiğim nesne duruyor. Her istekte login olmamam için bu application nesnesinin hep login durumda ayakta olması lazım hocam.
Valla işin içinden çıkamadım.
Kod: Tümünü seç
TigerHelper=class(tobject)
public
constructor create;
destructor destroy;override;
var
TigerObje:TUnityApplication;
end;
implementation
var
xtiger1:TigerHelper;
function TLogoTigerObjeServisi.kartac(kart: string): string;
var
salesdis : OleVariant;
transactions: OleVariant;
i : Byte;
begin
if xtiger1=nil then
begin
xtiger1:=TigerHelper.create;
end;
salesdis := xtiger1.TigerObje.NewDataObject(17); //ilk istekte bu doğru çalışıyor ikincisinde uygulama sunucuya bağlanmamış hatası veriyor.
salesdis.New;
salesdis.DataFields.FieldByName('TYPE').Value :=8;
...............
constructor TigerHelper.create;
begin
TigerObje:=TUnityApplication.Create(nil);
TigerObje.Login('kullanıcı adı','şifre',01,1);
end;
destructor TigerHelper.destroy;
begin
inherited;
end;
end;
Re: SOAP Web Servis Yaşam Döngüsü
Selamlar,
Bu tür işlemler biraz karışıktır ve ThreadList mantığında LOCK'lamalar gerek. Ayrıca TigerObje dediğiniz nesne GLOBAL tanımlanmalı. Ancak, buna erişimde (her bir thread erişim yapmadan önce LOCK'lamalı). Yani bir tane main nesne yarattıktan sonra onu destroy ettirmeyin Globalde bellekte kalsın ve o nesneye daha sonra LOCK'layarak erişim sağlayın.
Kolay Gelsin
Bu tür işlemler biraz karışıktır ve ThreadList mantığında LOCK'lamalar gerek. Ayrıca TigerObje dediğiniz nesne GLOBAL tanımlanmalı. Ancak, buna erişimde (her bir thread erişim yapmadan önce LOCK'lamalı). Yani bir tane main nesne yarattıktan sonra onu destroy ettirmeyin Globalde bellekte kalsın ve o nesneye daha sonra LOCK'layarak erişim sağlayın.
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: SOAP Web Servis Yaşam Döngüsü
Hocam işte benim sorunumda bu nasıl yapılacağını bilmiyorum. Global tanımlama ve lock lama için bir örnek verebilirseniz gerçekten çok sevinirim.
Teşekkürler.
Teşekkürler.
Re: SOAP Web Servis Yaşam Döngüsü
Selamlar,
Valla gözüm iş uzun şöyle kestirmeden bir datamodul oluşturun oluşturduğunuz datamodul'ün var kısmına kendi nesnenizi tanımlayın. Critical Section olayını inceleyin. Multi Threading and Critical Section şeklinde biraz google araştırın. Ben benzer bir örnek bulursam gönderirim. Bizim çok uğraştığımız bir konu bu ama ayıklanıp sana verebileceğim bir örneğim malesef yok !...
Kolay Gelsin
Valla gözüm iş uzun şöyle kestirmeden bir datamodul oluşturun oluşturduğunuz datamodul'ün var kısmına kendi nesnenizi tanımlayın. Critical Section olayını inceleyin. Multi Threading and Critical Section şeklinde biraz google araştırın. Ben benzer bir örnek bulursam gönderirim. Bizim çok uğraştığımız bir konu bu ama ayıklanıp sana verebileceğim bir örneğim malesef yok !...
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: SOAP Web Servis Yaşam Döngüsü
Hocam ben ne yaptım? Aralara memo'ya sınuç bildiren detaylar ekledim. Sen de her hareketi böyle memoya at ki çağrı sırasında neler oluyor anlamaya çalış. Mesela yeniden create mi ediyor, arada bir yerlerde class'ı mı uçuruyor? Bunu sadece kendin deneyip yanılarak bulabilirsin. Bizim yapabileceğimiz bir şey yok, sen de biliyorsun.