Frage

Ich habe einen webservice, und wenn ich will, um mit dessen Methoden instanziieren ich es in einem Verfahren, rufen Sie die Methode, und ich schließlich habe ich es entsorgen, aber ich finde auch es könnte in Ordnung zu instanziieren Sie den webservice in die "private void Main_Load(object sender, EventArgs e)" event.

Die Sache ist, dass wenn ich die erste Möglichkeit, die ich instanziieren Sie die webservice-jedes mal muss ich eine seiner Methoden aber in der anderen Art, wie ich halten Sie ein webservice verbunden werden alle die Zeit, wenn ich es verwenden, in einer form, zum Beispiel.

Ich würde gerne wissen, welche dieser Methoden besser sind oder wenn es einen viel besseren 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();
}
War es hilfreich?

Lösung

Es hängt davon ab, wie oft Sie gehen, um den Aufruf des web service.Wenn du gehst zu werden, ruft es fast ständig, es wäre wahrscheinlich besser, verwenden Sie die Methode #2.Allerdings, wenn Sie nicht immer genannt, ganz so Häufig, Sie sind besser dran, unter Verwendung der Methode #1, und nur instanziieren, wenn Sie es brauchen.

Andere Tipps

Jetzt habe ich eine Lösung für ein mobiles Gerät und stellt es auf unregelmäßigen Zeiten, es könnte verwendet werden in 10 Minuten, 1 Stunde, 4 Stunden seine sehr variabel, es scheint, dass die bessere Herangehensweise ist die erste Strategie.

Letztes Jahr gingen wir an einem Projekt, wo wir verwendet, webservices, ist die Tatsache, dass wir instanziiert unserer webservices an den Sub New () - Prozedur und es laufen sehr gut, aber manchmal einige Benutzer behaupten zu uns, dass Sie erwachte aus Ihren Stühlen und sobald Sie wieder und versuchte weiterhin auf die Anwendung, die Sie erhielt eine timeout-Fehlermeldung angezeigt, und Sie hatte erneut anzumelden.

Wir thougth, dass vielleicht das war Ok, weil vielleicht der Nutzer ging für eine sehr lange Zeit aus Ihren sitzen, aber einmal in einem Vortrag über die Anwendung von CEOs es passierte genau das gleiche Szenario und die ich persönlich nicht mochte, das Verhalten und das ist, warum die Frage.

Danke für die Antwort.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top