Jag har stött på ett litet problem som jag inte riktigt hittat någon lösning på.
Det jag vill är att anropa en webservices 3 gånger parallellt, jag gör detta med hjälp av metoden xxxAsync() och lyssnar sedan på eventet xxxCompleted. Detta fungerar bra och gör även att jag inte använder upp fler worker_threads utan använder mig av io_threads istället.
Mitt problem är nu att jag har en struktur som gör att jag vill kunna anropa dessa 3 webservices, vänta på svar från alla 3 och sedan returnera svaret från alla 3 samtidigt. Alltså så här:
min aspx-sida anropar en metod i processmanager och förväntar sig en List<Result> tillbaka, min metod i processmanager anropar webservicen 3 gånger asyncront och skall sedan vänta tills resultatet från webservicerna kommer tillbaka (givetviss till en annan metod, där denna metod stoppar in resultatet i en "public" List<Result> variable) när alla resultaten är klara så skall metoden i processmanagern lämna tillbaka listan med resultatet till min aspx-sida.
Jag har sett exempel där man använder sig av IAsyncResult för att lösa detta, men om man skapar en webservice inne i VS2005 till ett classlibrary så genereras inte Beginxxx och Endxxx metoderna utan endast xxxAsyn() så det kan jag inte använda mig av.
Nope men jag skickade ett mail Dino Esposito han har bland annant skrivit 'Programming Microsoft ASP.NET Application2.0 Advanded Topics' där han tar upp async webprogrammering. Får se om jag får något svar.
Jag vet inte om detta är ett snyggt svar men jag tror att det kommer att fungera.
Du säger att du väntar efter events, varför inte ligga och vänta i en tråd på att alla tre events skall hända och sedan gå vidare.
Alltså när ett event kommer spara detta i en variabel som din väntande klass kan komma åt, när alla 3 har kommit fortsätter den från loopen som väntar.
Du säger att du väntar efter events, varför inte ligga och vänta i en tråd på att alla tre events skall hända och sedan gå vidare
Jo det har jag testat, om jag gjorde en join eller la mig i en loop med Sleep() på min "main" tråd, så stannade websidan där, den kom fick aldrig tillbaka något svar från webservicerna... testade att dra igång en ny tråd som kallade de 3 webservicerna och det ser ut att fungera, problemet blir då att jag nu har bundit upp 2 worker_threads när mitt mål var att släppa tillbaka den första tråden till poolen så inga worker_threads skulle bindas när mina webservice anrop görs :(
Nu verkar det dock som jag kommit en liten bit på vägen, jag upptäckte att Beginxxx och Endxxx finns med som protected methods i den genererade proxyklassen till webservicen, så jag har skapat mig en partialklass som använder dessa två methoder för att få till det som jag vill, inte speciellt snyggt och inte direkt enkelt för en wevprogrammerare att använda, skall se om jag lyckas wrappa upp det på något snyggt sätt...
Så ja, nu är det löst, inte jättesnyggt, men det fungerar bra och det blir enkelt för webutvecklaren att kalla metoder i business som gör att man får asynkrona websidor, med alla de fördelar som det ger...
Använde mig av reflections för att köra igång BeginInvoke på min webservicemethod (BeginInvoke var ju protected så den kom jag inte åt från min kod) och nu fungerar det bra, det blir ju lite att skriva för backend programmeraren, men de personen har förhoppnings lite mer kunskap om detta än vad webprogrammeraren har...
- En glad Magnus
271 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25