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.
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å
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.");
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.