De ce sunați un serviciu web mai lent de la o pagină web?

Avem un DLL folosit ca strat intermediar între partea frontală a site-ului nostru și sistemul nostru de back-end ticketing. Metoda de inserare în sistemul de ticketing este puțin complicată pentru a explica, dar versiunea scurtă este că este lentă. Cel mai bun scenariu pe care l-am obținut este un timp de depunere de 9 secunde.

Problema reală, totuși, este că pot obține doar acel moment printr-o aplicație Windows, nu printr-un site web ASP.NET. Am creat atât o aplicație de testare Windows, cât și o pagină web pentru testare și, chiar dacă codul este copiat între ele, pagina web este în mod constant trimisă în 17-20 de secunde, în timp ce aplicația Windows este de 8-11 secunde.

Ce ar putea cauza asta?

EDIT: Ca raspuns la cateva raspunsuri ...

Apelul la serviciul web durează cea mai mare parte a timpului, dar nu am control asupra acestui serviciu web așa cum este furnizat de vânzătorul de sisteme de ticketing. Trebuie să aflu de ce serviciul web își ia diferite sume de timp atunci când este chemat să formeze un alt tip de aplicație. Codul este exact același în ambele cazuri și rulează o buclă, apoi raportează orele înregistrate.

Codul este:

for (int i = 0; i < numIterations; i++)
        {
            startTimes[i] = DateTime.Now;

            try
            {
                cvNum = Clearview.Submit(req, DateTime.Now, DateTime.Now, false);
            }
            catch (Exception ex)
            {
                exceptionCount++;
                lblResult.Text += @"
Exception Caught: " + ex.Message + @"
"; } endTimes[i] = DateTime.Now; }

Este aceeași buclă în ambele cazuri și notez timpul exact înainte și după apelul la bibliotecă, care procesează în continuare și apoi sună serviciul web. Dar prelucrarea ar trebui să fie consecventă, nu? Am urmărit în timpul depanării și nu am văzut nicio întârziere pentru a ajunge la apelul actual al serviciului web ...

EDIT din nou: Lucrul cu Anturii, în ambele cazuri, 99,4% din timp este trimis doar la apelul de serviciu web. Nu pare să existe nicio diferență acolo ... cu excepția faptului că atunci când expiră pagina web durează mai mult decât aplicația Windows.

1
Nu sunt sigur la ce te referi...?
adăugat autor CodeRedick, sursa
Testarea între două backend-uri diferite de servicii web: Referință.CS generată într-un caz și WebClient în altul. Referința este generată într-un .DLL utilizat de aplicația Windows și de pagina web.
adăugat autor CodeRedick, sursa
care Windows și clienții web folosiți pentru serviciile web?
adăugat autor Mark Cidade, sursa
Utilizați HttpWebRequest, un Reference.cs generat, un client Web client client JavaScript sau ce?
adăugat autor Mark Cidade, sursa

3 răspunsuri

Este posibil ca locația serviciului web în relație cu serverul web să aibă o problemă. De asemenea, structura paginii și alte procesări din cadrul interfeței dvs. web pot avea un impact asupra duratei procesării aplicației.

Așa cum am menționat articolele de înregistrări de pe ambele părți este o idee grozavă, dacă nu obține ceea ce aveți nevoie, ați putea încerca un profil de performanță, cum ar fi Ants Profiler de la Red Gate, care poate ajuta la identificarea liniei, metodei sau clasei care utilizează cea mai mare parte a timpului.

2
adăugat
M-aș uita la Ants Profiler în acest caz, uita-te la timpii de execuție bucla. De asemenea, sunt excepții aruncate mai mult într-un caz decât altul? Excepțiile sunt costisitoare.
adăugat autor Mitchel Sellers, sursa
Ok, vedeți dacă furnicile dintre cele două aplicații pot izola o linie specifică care depune mai mult efort.
adăugat autor Mitchel Sellers, sursa
Tocmai am adăugat editat în mai multe informații. Nu am acces la intervalele serviciului web, dar nu sunt sigur de ce ar conta oricum ...
adăugat autor CodeRedick, sursa
De asemenea, deoarece testez pe desktop-ul meu, serviciul web este în același loc pentru ambii clienți ...
adăugat autor CodeRedick, sursa
Se joacă cu Anturii acum, dar nu sunt aruncate excepții.
adăugat autor CodeRedick, sursa
Este apelul la serviciul web, așa cum am bănuit. 99% din timp este doar pe acel apel ...
adăugat autor CodeRedick, sursa

Piper aplicația dvs. pe ambele părți cu busteni - care vă va arăta în cazul în care timpul se întâmplă. Dacă acest lucru nu vă ajută, utilizați Wireshark pentru a urmări activitatea rețelei.

1
adăugat

Rulezi atât pe aceeași mașină? Este stratul de mijloc pe care îl apelați situat pe o mașină de la distanță? Perioadele de timp pe care le-ați menționat vag se simt ca o problemă de expirare a timpului de expirare a DNS, când deschiderea unei conexiuni implică pedeapsa primului (down/misaddressed) răspuns DNS la expirarea timpului. Sunteți sigur că orice fișier de configurare/var care indică DLL-ul la nivelul de mijloc este același în ambele invocări?

Am al doilea sugestie de a folosi Wireshark pentru a vedea ce se intampla. Puteți cel puțin să vă asigurați că timpul de procesare a backend-ului este (ar trebui, oricum) același ...

1
adăugat
A fost o problemă de configurare, una se supunea sistemului de producție, deși ambele utilizează serviciul web corect. Diferența de timp sa datorat cât de mult este mai ocupată baza de date prod. Sincer, nu știți de ce a funcționat deloc ... Mulțumesc!
adăugat autor CodeRedick, sursa