Question

J'ai créé un service Web et lorsque je veux utiliser ses méthodes, je l'instancier dans la procédure a, j'appelle la méthode et finalement je m'en débarrasse, mais je pense qu'il pourrait également être acceptable d'instancier le service Web dans le "vide privé". Événement Main_Load (expéditeur d'objet, EventArgs e)".

Le fait est que si je le fais de la première manière, je dois instancier le webservice à chaque fois que j'ai besoin d'une de ses méthodes mais dans l'autre sens, je dois garder un webservice connecté tout le temps lorsque je l'utilise dans un formulaire par exemple.

J'aimerais savoir lesquelles de ces pratiques sont les meilleures ou s'il existe une bien meilleure façon de le faire

Stratégie 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();
    }
}

Stratégie 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();
}
Était-ce utile?

La solution

Cela dépend de la fréquence à laquelle vous allez appeler le service Web.Si vous comptez l'appeler presque constamment, il serait probablement préférable d'utiliser la méthode n°2.Cependant, s'il ne sera pas appelé aussi souvent, il est préférable d'utiliser la méthode n°1 et de ne l'instancier que lorsque vous en avez besoin.

Autres conseils

En ce moment, j'ai créé une solution pour un appareil mobile et il s'avère être utilisé à des heures irrégulières, il pourrait être utilisé en 10 minutes, 1 heure, 4 heures, c'est très variable, il semble que la meilleure approche soit la première stratégie.

L'année dernière, nous avons participé à un projet dans lequel nous utilisions des services Web. Le fait est que nous avons instancié nos services Web via la procédure Sub New() et qu'ils l'ont très bien exécuté. Cependant, parfois certains utilisateurs nous ont affirmé qu'ils s'étaient réveillés de leur chaise et lorsqu'ils sont revenus et ont essayé de continuer sur l'application, ils ont reçu un message d'erreur de délai d'attente et ont dû se reconnecter.

Nous avons pensé que c'était peut-être correct parce que peut-être que les utilisateurs sont sortis de leur siège pendant très longtemps, mais une fois lors d'une présentation de l'application avec les PDG, le scénario s'est produit exactement le même et personnellement, je n'ai pas aimé ce comportement et c'est pourquoi la question.

Merci d'avoir répondu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top