Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Datasnapni clienti server bilan aloqa yo`qolganda connected xossasi true ligicha qolmoqda

+5 ovoz
125 marta ko‘rilgan
so‘radi 15 dekabr, 16 oakrom (389 bal)
tahrirlandi 26 dekabr, 16 oakrom

Datasnap texnologoyasidan foydalanganla bormi? Datasnapni clienti server bilan aloqa yo`qolganda connected xossasi true ligicha qolmoqda, birontangiz shu muammoga duch kelganmisila? Dasturda xatolik chiqmasligi uchun DS (DataSnap) Server ning biron funksiyasidan foydalanishdan oldin shu server bilan connection bormi-yo'qmi shuni tekshirish uchun TSQLConnection komponentasining Connected xossasini tekshirish kerak, bu vazifani bajarish uchun alohida DSConnectionCheck funksiyasi (bu yerda soddalashtirilgan variantini yozdim aslida bu funksiyada boshqa parametrlar ham bor, yani connection ni statuslarini client dasturida connectionga qarab o'zgartirish va qo'shimcha amallarni bajarishni olib tashlaganman koddan) yozildi:

class function DSConnectionCheck(aDSConnection: TSQLConnection): Boolean; 
begin 
  Result:=aDSConnection.Connected; 
  if aDSConnection.Connected then 
    DoSomeOperations 
  else 
    DoAnotherOperations; 
end;

Muammo shundaki, Client serverga bir marta ulangandan so'ng clientning mashinasida qandaydir sabablarga ko'ra internet aloqa yo'qolsa yoki DS Server turgan kompyuter ayrim avariyaviy sabablarga ko'ra ishlamay o'chib qolsa ham clientda Connection doim true qiymatini qaytarmoqda. Bu o'z navbatida dasturga serverning metodlari bilan biron amal bajarish uchun o'z vaqtida connection bor yoki yo'qligini bilib olishiga to'sqinlik qilmoqda va dasturda kutilmagan xatoliklarni keltirib chiqarmoqda.

2 Javoblar

+2 ovoz
javob berdi 26 dekabr, 16 oakrom (389 bal)
tanlangan 21 fevral, 17 vejon
 
Eng yaxshi javob

Conectionni connected xossasining bunday tarzda o'zini tutishining asl sabablarini tagiga yetib bo'lmadi, lekin muammoni aylanib o'tish uchun boshqacharoq yo'l tutishga to'g'ri keldi. DSServer da doim True qiymatini qaytaradigan CheckConnectionState degan funksiya yozib DSConnectionCheck funksiyasida try except bloklarida shu funksiyani chaqirib connectionni xaqiqatda bor-yo'qligini tekshirishga to'g'ri keldi.

class function DSConnectionCheck(aDSConnection: TSQLConnection): Boolean;
var ServerMethods:TServerMethodsOnClient;
begin
  Result:=False;
  if not aDSConnection.Connected then
    DoAnotherOperations
  else
  begin
    try
      ServerMethods:=TServerMethodsOnClient.Create(aDSConnection.DBXConnection, True);
      Result:=ServerMethods.CheckConnectionState;
      DoSomeOperations;
    except
      on E:Exception do
      begin
        ErrorLog.Add(E.Message);
        DoAnotherOperations;
      end;
    end;
  end;
end;
0 ovoz
javob berdi 20 fevral, 17 DelphiGuru (823 bal)
DataSnapda TCP/IP connectionlarni monitor qilish orqali internetdan kelayotgan datalarni Listen qilib tekshirib ko'rdingizmi?

TDSTCPServerTransport kompanenti bilan OnConnect va OnDisconnect eventlarida ushlashingiz mumkin. Albatta bu yerda Indy TCP kompanenti ham ro'l o'ynaydi.

Client bog'lana olmayotganida yoki internet xatoliklar bo'lib qolsa, EnableKeepAlive protsedurasi orqali ma'lum vaqt respond qilib turishingiz mumkin. Uzilishni tiklay olmasangiz o'sha kanalni close qilvorishingiz mumkin. (va yana qaytdan connect qilasiz)

Yana bilmadim. Men DataSnap freymvorkida ishlash bo'yicha kuchli tajribaga ega emas. Lekin bundan 4-5 oy oldin bitta Windows Servis dasturni tuzayotganda shunga o'xshash xatoliklar bo'lgandi. O'shanda Connection larni Listen qilib, not responding ni fix qilgandik.
izoh qoldirdi 21 fevral, 17 oakrom (389 bal)
bironta sample bormi? Ilojisi bo'lsa tashlang ko'rib chiqaylik.
izoh qoldirdi 22 fevral, 17 oakrom (389 bal)
Yordamiz uchun katta rahmat, birinchi havola Server qismida connectionlani boshqarish bo'yicha ekan, ikkinchi havolada faqat connectionni yaratib DataSnap serverga ulanish xaqida ekan, mendagi vaziyat xaqida ma'lumot topa olmadim ushbu havolalarda, ya'ni nega clientda Conectionni connected xossasi aloqa avariyaviy uzilganda ham doim True qiymatini ko'rsatishini. Mani fikrimcha bu DataSnap frameworkdagi kamchilik bo'lsa kerak deb o'ylayabman.
izoh qoldirdi 22 fevral, 17 DelphiGuru (823 bal)
Xa.

Balki bu frameworkni kamchiligidir. Lekin, biror narsa deyish qiyin.

Kecha Indy TCPClient kompanentida ham  sizzikiga o'xshash xatolik bo'ldi. Connection true ligicha qolib ketayabdi. Lekin faqat Windowsda shunday bo'layabdi. Android OS da esa barchasi yaxshi.

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...