Avatar billede dinirex Nybegynder
06. juli 2011 - 12:08 Der er 14 kommentarer

Asynkront svar

Hej.

Jeg skal mocke en service til et testmiljø. Ergo kan jeg ikke ændre i klient koden.

Servicen skal returnere to svar. Et at data'en er modtaget, og to senere når data'en er behandlet.

Eks.

CreateCustomer(Host, CustomerData) bliver kaldt, den skal så starte en ny tråd, som validere koden, og returnere at data er modtaget.

Tråden der blev startet validere så koden, og når den er færdig skal den sende svaret til klienten.

I Host objektet ligger en responseurl.

Nu er mit spørgsmål, hvordan gør jeg dette? Hvordan får jeg metoden som bliver startet i en ny tråd, til at sende svar til response urlen?
Avatar billede bvli Praktikant
06. juli 2011 - 12:19 #1
Avatar billede dinirex Nybegynder
06. juli 2011 - 12:32 #2
Men det vil kræve ændring i Klient koden?
Avatar billede bvli Praktikant
06. juli 2011 - 12:38 #3
Jo, hvis ikke den service du skal mock'e i forvejen bruger callbacks. Men hvad bruger den da?

Jeg mener - du har jo klientkoden nu; hvordan håndterer den svaret fra servicen? Hvordan får serveren at vide, hvem den skal lave sit svar til?
Avatar billede dinirex Nybegynder
06. juli 2011 - 12:48 #4
Jeg kender ikke den oprindelige service, da det er en ekstern udbyder. Men jeg ved, at vi laver et synkron kald til en metode, med et host objekt, og starter en ny tråd, og returnere at den har modtaget data'en. Senere modtages så det endelige svar, om data'en var valid eller ej.

Dette gøres ved at vi lytter på response url'en og venter på svar.

Har ikke klient koden der benytter servicen, har blot fået information om hvilke metoder den kalder.
Avatar billede bvli Praktikant
06. juli 2011 - 13:01 #5
Det bliver lidt noget gætværk, når du ikke fortæller noget om, hvordan I har implementeret service/client. Er det wcf? I så fald, hvilken binding bruger i? Er det "gamle" asmx-services? Hvordan ser kaldet ud? Sender I en responseUrl med som parameter til det første kald?
Avatar billede dinirex Nybegynder
06. juli 2011 - 13:15 #6
Det hele gøre "gamle" asmx-services.
Kaldet ser ud, som i det første indlæg CreateCustomer(Host, Customer);

hvor Host indeholder User og ResponseUrl
Avatar billede bvli Praktikant
06. juli 2011 - 13:18 #7
Ok.. Tror jeg svarede på noget tilsvarende for nogle år siden (bare i en aspx-context). Jeg prøver lige at finde tråden.
Avatar billede bvli Praktikant
06. juli 2011 - 13:23 #8
Avatar billede dinirex Nybegynder
06. juli 2011 - 13:32 #9
Hmm... Tja, men den del har jeg løst. Mit egentlige problem, er at retunere selve svaret når tråden er færdig med at behandle det. Den skal retunere et Reponse objekt, til reponse urlen. Det er det, som er mit problem. Jeg kan ikke finde en måde at sige, den skal retunere dette objekt til denne url
Avatar billede bvli Praktikant
06. juli 2011 - 14:16 #10
Du skal vel generere en webservice proxy mod den webservice der står og venter på response?
Avatar billede dinirex Nybegynder
06. juli 2011 - 14:55 #11
A Kalder Service B CreateCustomer(Host, Customer)
B Kalder intern metode Valid(object) i en ny tråd
B returnere til A, at data'en er modtaget.
A arbejder videre.
B er nu færdig med at validere data, sender resultat til A
A modtager et internt callback på, at data er modtaget

Det er B er nu færdig med at validere data, sender resultat til A, jeg har problemer med.
Avatar billede bvli Praktikant
06. juli 2011 - 15:08 #12
Som jeg har forstået dig, så spawner A en thread, som lytter efter valideringsresultatet fra B (altså det sidste). Du må da på en eller anden måde vide/kunne få at vide, hvordan den lytter?

Det mest naturlige er vel, at det er en webservice, som du på en eller anden måde må kunne få noget wsdl på og generere en proxy ud fra.

Men det kan jo også være at du bare skal lave et httprequest mod den, med nogle post/get værdier.

Under alle omstændigheder er det svært at gætte sig frem til :)
Avatar billede dinirex Nybegynder
06. juli 2011 - 15:16 #13
Kan godt tyde på jeg mangler noget information :)

A har en konstant thread, der lytter på et endpoint (reponse url'en) .

A er en JBoss service, hvor B er en asmx webservice. B er genereret ud fra en wsdl, som er opgivet fra udbyder.
Avatar billede bvli Praktikant
07. juli 2011 - 09:45 #14
Og det er B som du skal lave en mock af ikk'? Betyder det så, at du har kontrol over A?

Kan du ikke prøve at smide en browser på responseuri'en og se om der monstro kommer et link til noget wsdl, som du kan bruge til at generere en client proxy som du så kan bruge i din mock til at lave callback til A?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester