Delphi SOAP veb-brauzerlari bilan DNS-keshlash uchun TTL-ni qanday qilib sozlashim mumkin?

Internetda veb-xizmatiga kirish uchun Delphi ilovasi mavjud. Xizmat ko'rsatuvchi provayder endi bulutli infratuzilmaga aylandi va menga quyidagi so'rov bilan keldi:

"Iltimos, tarmoq manzilini kiriting.cache.ttl kodini faylida quyidagicha sozlang: networkaddress.cache.ttl = 60

Veb-servis provayderiga muvofiq, bu xizmat uchun barcha sharoitlarda to'g'ri natijalarni taqdim etish kerak. U mening ilovamning aloqasini tekshirib ko'rdi va u bir marta shu IP-manzilga tayangan holda paydo bo'lganiga o'xshaydi. Ilovalarni qayta ishga tushirishni bir marta hal qildim.

IDE tomonidan taqdim etilgan sehrgarni foydalanib, WSDLni import qilmoqdaman, shuning uchun veb-xizmatiga kirish uchun THTTPRIO misolidan foydalanmoqdaman. THTTPRIO-namunasi asosiy forma FormCreate() da yaratilgan. Dastur 24 soat davomida ishlaydi va veb-xizmatining muntazam ravishda bir nechta usullariga kiradi.

Delphi SOAP kvadratchalarida DNS keshini ishlatish kerakmi? Ha bo'lsa, Java'da networkaddress.cache.ttl kabi bir xil xususiyat mavjudmi?

Muammoni hal qilish uchun yaxshi vaqtinchalik echim mavjudmi (masalan, har bir qo'ng'iroqdan avval faqat FormCreate formatida bir marta amalga oshiriladi)?

EDIT: The Application is compiled using Delphi 10.1. Berlin (originally developed with Delphi XE7). It is running on an Windows 7 machine.

0
Qaysi platforma? (Javob OTga bog'liq bo'lishi mumkin)
qo'shib qo'ydi muallif mjn, manba
Qaysi platforma? (Javob OTga bog'liq bo'lishi mumkin)
qo'shib qo'ydi muallif mjn, manba
Siz delphi uchun bir xil ramka ishlatasizmi? Qaysi OS?
qo'shib qo'ydi muallif Oscar, manba
Windows 7 (bu savolga qo'shildi).
qo'shib qo'ydi muallif Andreas Wieland, manba
Windows 7 (bu savolga qo'shildi).
qo'shib qo'ydi muallif Andreas Wieland, manba
Men Delphi (Delphi 10.1 Berlin Enterprise ATM) bilan birga kelgan SOAP tizimini ishlataman. Windows 7 da ishlayapti.
qo'shib qo'ydi muallif Andreas Wieland, manba
Men Delphi (Delphi 10.1 Berlin Enterprise ATM) bilan birga kelgan SOAP tizimini ishlataman. Windows 7 da ishlayapti.
qo'shib qo'ydi muallif Andreas Wieland, manba

6 javoblar

Men buni Windows ro'yxatga olish kitobida butun dunyo bo'ylab o'rnatishingiz mumkin deb o'ylayman.

Regedit.exe faylini oching va quyidagilarni bajaring:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

O'ng tomondagi panelda quyidagi qiymatni qo'shing:

Ismi: DefaultTTL, Turi: REG_DWORD, To'g'ri oralig'i: 1-255

Kompyuterni qayta ishga tushiring.

https://technet.microsoft.com/en-us/library/cc957530. aspx

2
qo'shib qo'ydi
Bu butunlay noto'g'ri TTL.
qo'shib qo'ydi muallif Free Consulting, manba
@AndreasWieland Ushbu boshqa kalit nima? HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ DNSCache \ Parametrlar technet.microsoft.com/en-us/library/cc775464(v=ws.10).aspx
qo'shib qo'ydi muallif Oscar, manba
Agar Windows bu erda aybdor bo'lsa, bu sizga yordam berishi mumkin - faqatgina technet maqolasi Windows Server operatsion tizimi emas, balki Windows Server operatsion tizimi haqida gapiradi ... Men buni tekshirib ko'rish uchun juda og'ir usul yo'qligini tekshirib ko'rmoqchiman ... .
qo'shib qo'ydi muallif Andreas Wieland, manba
Ushbu TTLni o'qiganimdan TCPIP tarmoq paketlariga mos keladi. Ammo Java'da networkaddress.cache.ttl DNS keshlash o'rniga ta'sir qiladi: http://docs.oracle.com/javase/7/docs/technotes/guides/net/pr‌ operements.html # nct
qo'shib qo'ydi muallif Andreas Wieland, manba

Men buni Windows ro'yxatga olish kitobida butun dunyo bo'ylab o'rnatishingiz mumkin deb o'ylayman.

Regedit.exe faylini oching va quyidagilarni bajaring:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

O'ng tomondagi panelda quyidagi qiymatni qo'shing:

Ismi: DefaultTTL, Turi: REG_DWORD, To'g'ri oralig'i: 1-255

Kompyuterni qayta ishga tushiring.

https://technet.microsoft.com/en-us/library/cc957530. aspx

2
qo'shib qo'ydi
Bu butunlay noto'g'ri TTL.
qo'shib qo'ydi muallif Free Consulting, manba
@AndreasWieland Ushbu boshqa kalit nima? HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ DNSCache \ Parametrlar technet.microsoft.com/en-us/library/cc775464(v=ws.10).aspx
qo'shib qo'ydi muallif Oscar, manba
Ushbu TTLni o'qiganimdan TCPIP tarmoq paketlariga mos keladi. Ammo Java'da networkaddress.cache.ttl DNS keshlash o'rniga ta'sir qiladi: http://docs.oracle.com/javase/7/docs/technotes/guides/net/pr‌ operements.html # nct
qo'shib qo'ydi muallif Andreas Wieland, manba
Agar Windows bu erda aybdor bo'lsa, bu sizga yordam berishi mumkin - faqatgina technet maqolasi Windows Server operatsion tizimi emas, balki Windows Server operatsion tizimi haqida gapiradi ... Men buni tekshirib ko'rish uchun juda og'ir usul yo'qligini tekshirib ko'rmoqchiman ... .
qo'shib qo'ydi muallif Andreas Wieland, manba

DnsFlushResolverCache topdingizmi?

DNS resolver keshini IPCONFIG/flushdns kabi o'chirish uchun   dasturiy jihatdan bajaradi:

     

Win2000 yoki undan keyingi versiyani talab qiladigan dnsapi.dllni talab qiladi. Odatdagidek, milodiy   APIni hujjatsiz emas,

Source: http://brannockdevice.blogspot.de/2006/04/winxp-flushing-dns-programatically.html

1
qo'shib qo'ydi
Rahmat! Agar oddiy qayta ulash etarli bo'lmasa, bu qulay bo'lishi mumkin ...
qo'shib qo'ydi muallif Andreas Wieland, manba

DnsFlushResolverCache topdingizmi?

DNS resolver keshini IPCONFIG/flushdns kabi o'chirish uchun   dasturiy jihatdan bajaradi:

     

Win2000 yoki undan keyingi versiyani talab qiladigan dnsapi.dllni talab qiladi. Odatdagidek, milodiy   APIni hujjatsiz emas,

Source: http://brannockdevice.blogspot.de/2006/04/winxp-flushing-dns-programatically.html

1
qo'shib qo'ydi
Rahmat! Agar oddiy qayta ulash etarli bo'lmasa, bu qulay bo'lishi mumkin ...
qo'shib qo'ydi muallif Andreas Wieland, manba

Men manba kodini biroz chuqur qazishman va men javob topib olganimga ishonaman. Delphi SOAP ramkasi o'z-o'zidan DNS-keshlash kabi ko'rinmaydi. Faqatgina veb-xizmatiga ulanish Windows InternetConnect() funksiyasi orqali birinchi so'rov bilan bajariladi va natijadan so'ng saqlangan va qayta ishlanadigan dastlabki ishchi saqlanadi.

Bu erda biroz ko'proq ma'lumot bor:

THTTPRIO sinf, THTTPReqResp misoli orqali veb-xizmati bilan bog'lanadi:

property HTTPWebNode: THTTPReqResp read GetHTTPWebNode write SetHTTPWebNode;

THTTPReqResp calls the Connect() method before every request which again uses a WinApi function to estabish a connection and stores the resulting handle in a field:

FInetConnect := InternetConnect(FInetRoot, PChar(FURLHost), FURLPort, PChar(FUserName), PChar(FPassword), INTERNET_SERVICE_HTTP, 0, NativeUInt(Self));

Ammo - Connect() usuli faqat agar u allaqachon ulanmagan bo'lsa, buni amalga oshiradi - quyidagi kod faqat Connect() usuli boshida topiladi:

if (FConnected) then
  Exit;

Shunday qilib ulanish faqat birinchi so'rovdan ochiq qoladi. Quyidagi so'rovlar oddiygina InetConnect dan saqlangan tutamdan foydalaniladi.

Bulut xizmati bilan bog'liq muammom uchun THTTPRIO o'zimning misolini yaratish va veb-xizmat interfeysi qaytarib beradigan funktsiyaga o'tish uchun etarli bo'lishi kerak:

RIO := THTTPRIO.Create(nil);
FM := GetFleetManagerAPISoap(FALSE, '', RIO);

Keyin har qanday veb-xizmat vazifasini chaqirishdan oldin, har doim ajratib qo'yaman:

RIO.HTTPWebNode.Connect(FALSE);

Nazarimda, nihoyat InternetConnect() orqali yangi ulanishga olib borishi kerak va umid qilamanki, mening muammom echiladi. (Shunga qaramay, buni sinab ko'rish kerak)

0
qo'shib qo'ydi

Men manba kodini biroz chuqur qazishman va men javob topib olganimga ishonaman. Delphi SOAP ramkasi o'z-o'zidan DNS-keshlash kabi ko'rinmaydi. Faqatgina veb-xizmatiga ulanish Windows InternetConnect() funksiyasi orqali birinchi so'rov bilan bajariladi va natijadan so'ng saqlangan va qayta ishlanadigan dastlabki ishchi saqlanadi.

Bu erda biroz ko'proq ma'lumot bor:

THTTPRIO sinf, THTTPReqResp misoli orqali veb-xizmati bilan bog'lanadi:

property HTTPWebNode: THTTPReqResp read GetHTTPWebNode write SetHTTPWebNode;

THTTPReqResp calls the Connect() method before every request which again uses a WinApi function to estabish a connection and stores the resulting handle in a field:

FInetConnect := InternetConnect(FInetRoot, PChar(FURLHost), FURLPort, PChar(FUserName), PChar(FPassword), INTERNET_SERVICE_HTTP, 0, NativeUInt(Self));

Ammo - Connect() usuli faqat agar u allaqachon ulanmagan bo'lsa, buni amalga oshiradi - quyidagi kod faqat Connect() usuli boshida topiladi:

if (FConnected) then
  Exit;

Shunday qilib ulanish faqat birinchi so'rovdan ochiq qoladi. Quyidagi so'rovlar oddiygina InetConnect dan saqlangan tutamdan foydalaniladi.

Bulut xizmati bilan bog'liq muammom uchun THTTPRIO o'zimning misolini yaratish va veb-xizmat interfeysi qaytarib beradigan funktsiyaga o'tish uchun etarli bo'lishi kerak:

RIO := THTTPRIO.Create(nil);
FM := GetFleetManagerAPISoap(FALSE, '', RIO);

Keyin har qanday veb-xizmat vazifasini chaqirishdan oldin, har doim ajratib qo'yaman:

RIO.HTTPWebNode.Connect(FALSE);

Nazarimda, nihoyat InternetConnect() orqali yangi ulanishga olib borishi kerak va umid qilamanki, mening muammom echiladi. (Shunga qaramay, buni sinab ko'rish kerak)

0
qo'shib qo'ydi