Avatar billede cplus Nybegynder
09. maj 2005 - 13:43 Der er 15 kommentarer og
1 løsning

WebService kommunikation

Jeg sidder med det problem at min app engang imellem smider forbindelsen til webservicen.. HTTP-PROTO vel sagtens :(
(WebException)

Problemet er at der skal sikres at forbindelsen altid er tilstede.

Kunne man gøre det via en keepalive tråd eller er der andre smarte måder at gøre det på?
Avatar billede arne_v Ekspert
09. maj 2005 - 14:00 #1
HTTP er af natur connection less, så hvis du får fejl, så skyldes det
nok at der er et faktisk netværks problem og ikke en timeout.
Avatar billede cplus Nybegynder
09. maj 2005 - 14:05 #2
ok... så det vil sige det nytter ingenting med keepalive.

Tak for svaret
Avatar billede cplus Nybegynder
09. maj 2005 - 14:06 #3
..............^

Svar :)
Avatar billede arne_v Ekspert
09. maj 2005 - 14:13 #4
det tror jeg ikke

men hvis du postede den præcise fejl så kunne vi måske være mere sikre

og svar
Avatar billede nielle Nybegynder
09. maj 2005 - 14:13 #5
Som arne_v skriver er http (og dermed også soap) connection-less og der er derfor ikke noget at keep-alive på.

Jeg ville løse problemet med at lægge en proxy-klasse indkapsle det lokale kald; Alle kald til web-servicen sendes til denne klasse, hvorefter det så er den som kalder webservicen. Svar fra webservicen leveres tilbage til den kaldende klasse. UNDTAGEN altså hvis svaret fra webservicen timer ud. I det tilfælde ville jeg vente et vist tidsinterval (som regel et random antal ms) for derefter at sende kaldet til webservicen en gang til. Enten svare webservicen nu tilbage eller også så timer svaret ud endnu engang, hvorefter proxy’en gentager proceduren.

En sådan proxy bør være forsynet med en tæller mekanisme sådan at den f.eks. kun forsøger et bestemt antal gange før at den giver op.
Avatar billede cplus Nybegynder
09. maj 2005 - 14:30 #6
nielle det gør jeg faktisk allerede.

Jeg var på jagt efter mulige alternativer til at forbindelsen ikk kunne opnås og idet at HTTP ikke har en reel keep alive model som arne v beskriver -ja så er det velsagtens den eneste måde og sikre det på
Avatar billede nielle Nybegynder
09. maj 2005 - 14:52 #7
Ok, jeg forstår.

Men siden at jeg nu lige har brugt noget tid på at lave en model for en sådan proxy, så får du den alligevel. ;^)

public class ProxyMyWebService
{
    public static int MyWebServiceMethod(int Arg1, int Arg2)
    {
        int Reply = 0;

        int TryNo = 0;
        int MaxTryNo = 5;
        bool Succes = false;
        Random Fate = new Random();

        do
        {
            try
            {
                TryNo++;
                if (TryNo > MaxTryNo)
                {
                    Succes = false;
                    break;
                }

                MyWebService MWS = new MyWebService();
                Reply = MWS.MyWebServiceMethod(Arg1, Arg2);

                Succes = true;
            }
            catch (System.Net.WebException)
            {
                Succes = false;
                int SleepPeriod = Fate.Next(1000, 5000);
                Thread.Sleep(SleepPeriod);
            }
        }
        while (!Succes);

        if (!Succes)
            throw new System.Net.WebException("Kunne ikke få kontakt efter " + MaxTryNo + " forsøg.");

        return Reply;
    }
}
Avatar billede cplus Nybegynder
09. maj 2005 - 14:55 #8
Det er nogenlunde også det jeg har lavet. Dog med den forskel at jeg bruger et fast gentagelses forsøg.
Avatar billede arne_v Ekspert
09. maj 2005 - 21:40 #9
Det var *meget* fristende at rette lidt i den genererede stub og indsætte:

    protected new object[] Invoke(string methodName, object[] parameters)
    {
        // retry code that calls:
        //    base.Invoke(methodName, parameters)
    }

alle metoderne med et smæk !
Avatar billede nielle Nybegynder
09. maj 2005 - 21:45 #10
Det er som regel fristelserne der gør det hele sjovere ;^)

Man skal bare huske det når man engang får brug for at genopfriske stuppen.
Avatar billede arne_v Ekspert
09. maj 2005 - 21:49 #11
jep

men jeg synes at Microsoft skulle havde ofret 8 tegn ("virtual ") mere i
deres kode så man bare kunne have arvet fra den genererede stub ...
Avatar billede nielle Nybegynder
17. maj 2005 - 17:33 #12
Lukketid?
Avatar billede arne_v Ekspert
28. maj 2005 - 16:43 #13
??
Avatar billede cplus Nybegynder
28. juni 2005 - 09:33 #14
somebody answer
Avatar billede cplus Nybegynder
27. juli 2005 - 12:14 #15
et svar?
Avatar billede arne_v Ekspert
27. juli 2005 - 12:20 #16
der er svar og du har accepteret svar
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