2008-08-16 10 views
2

J'ai créé un service web et quand je veux utiliser ses méthodes, je l'instancie dans une procédure, j'appelle la méthode, et finalement je la dispose, mais je pense aussi que ça peut être bien d'instancier le webservice dans l'événement "private void Main_Load (expéditeur d'objet, EventArgs e)". Le fait est que si je le fais de la première façon je dois instancier le webservice chaque fois que j'ai besoin de l'une de ses méthodes mais dans l'autre sens je dois garder un webservice connecté tout le temps quand je l'utilise dans un forme par exemple.Meilleure pratique pour les services Web

Je voudrais savoir lequel de ces pratiques sont mieux ou s'il y a une 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(); 
} 

Répondre

2

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

0

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

L'année dernière, nous avons lancé un projet où nous utilisions des services web, le fait est que nous avons instancié nos services web à la procédure Sub New() et ça marche très bien, parfois certains utilisateurs nous ont dit qu'ils se réveillaient à partir de leurs chaises et quand ils sont retournés et ont essayé de continuer sur l'application, ils ont reçu un message d'erreur d'expiration et ils ont dû se reconnecter à nouveau. Nous pensons que peut-être c'était Ok parce que les utilisateurs ont peut-être quitté leur siège très longtemps, mais une fois dans une présentation de l'application avec les PDG, c'est exactement le même scénario et personnellement je n'ai pas comme ce comportement et c'est pourquoi la question.

Merci pour la réponse.

Questions connexes