2008-08-16 9 views
2

Ich habe einen Webservice erstellt und wenn ich seine Methoden verwenden möchte, instanziiere ich es in einer Prozedur, rufe die Methode auf, und ich verfüge schließlich über sie, aber ich denke auch, dass es in Ordnung sein könnte zu instanziieren den Webservice im Ereignis "private void Main_Load (Objekt Absender, EventArgs e)".Best Practice für Webservices

Die Sache ist, dass, wenn ich es die erste Art mache, ich den Webservice instanziieren muss, jedes Mal, wenn ich eine seiner Methoden brauche, in der anderen Weise muss ich einen Webservice ständig verbunden halten, wenn ich es in einem benutze Form zum Beispiel.

Ich möchte, welche diese Praktiken wissen, besser oder wenn es ein viel besserer Weg, es zu tun

Strategie 1

private void btnRead_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     //Show clock 
     this.picResult.Image = new Bitmap(pathWait); 

     Application.DoEvents(); 

     //Connect to webservice 
     svc = new ForPocketPC.ServiceForPocketPC(); 
     svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password); 
     svc.AllowAutoRedirect = false; 
     svc.UserAgent = Settings.UserAgent; 
     svc.PreAuthenticate = true; 
     svc.Url = Settings.Url; 
     svc.Timeout = System.Threading.Timeout.Infinite; 

     svc.CallMethod(); 
     ... 
    } 
    catch (Exception ex) 
    { 
     ShowError(ex); 
    } 
    finally 
    { 
     if (svc != null) 
      svc.Dispose(); 
    } 
} 

Strategie 2

private myWebservice svc; 

private void Main_Load(object sender, EventArgs e) 
{ 
    //Connect to webservice 
    svc = new ForPocketPC.ServiceForPocketPC(); 
    svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password); 
    svc.AllowAutoRedirect = false; 
    svc.UserAgent = Settings.UserAgent; 
    svc.PreAuthenticate = true; 
    svc.Url = Settings.Url; 
    svc.Timeout = System.Threading.Timeout.Infinite; 
} 

private void btnRead_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     //Show clock 
     this.picResult.Image = new Bitmap(pathWait); 

     Application.DoEvents(); 
     svc.CallMethod(); 
     ... 
    } 
    catch (Exception ex) 
    { 
     ShowError(ex); 
    } 
} 

private void Main_Closing(object sender, CancelEventArgs e) 
{ 
    svc.Dispose(); 
} 

Antwort

2

Es hängt davon ab, wie oft Sie den Web Service anrufen werden. Wenn Sie es fast ständig aufrufen, wäre es wahrscheinlich besser, Methode 2 zu verwenden. Wenn es jedoch nicht so oft aufgerufen wird, ist es besser, Methode 1 zu verwenden und sie nur dann zu instanziieren, wenn Sie sie benötigen.

0

Im Moment habe ich eine Lösung für ein mobiles Gerät und es wird zu unregelmäßigen Zeiten verwendet werden, könnte es in 10 Minuten verwendet werden, 1 Stunde, 4 Stunden ist sehr variabel, es scheint, dass der bessere Ansatz der erste ist Strategie.

Letztes Jahr gingen wir zu einem Projekt, bei dem wir Webservices einsetzten, Tatsache ist, dass wir unsere Webservices bei der SubNew() Prozedur instanziiert haben und es sehr gut laufen, aber manchmal behaupteten einige Benutzer bei uns, dass sie aufwachten von ihren Stühlen und als sie zurückkamen und versuchten, die Anwendung fortzusetzen, erhielten sie eine Timeout-Fehlermeldung und sie mussten sich erneut anmelden.

Wir dachten, dass das vielleicht OK war, weil die Benutzer sehr lange von ihren Sitzen ausgegangen sind, aber einmal in einer Präsentation der Anwendung mit den CEOs passierte genau dasselbe Szenario und persönlich tat ich nicht wie dieses Verhalten und deshalb die Frage.

Danke für die Antwort.