2009-06-17 7 views
0

J'ai hérité du code et je ne suis pas très familier avec les services Web. Voici comment le projet est mis en place:Erreurs de délai d'attente lors de l'appel du service Web dans C# .Net 2.0

Sous "Références Web", il y a une référence au service Web que nous utilisons. Dans le fichier Reference.cs de ce service il y a une classe qui hérite de SoapHttpClientProtocol, cette classe a une fonction appelée CandidateAdd() qui appelle this.Invoke (Je pense que cela fait l'appel de la méthode web)

Deux classes dérivent ensuite de celle dans le fichier Reference.cs (un pour l'environnement de production et un pour dev) et ils contiennent seulement une substitution de GetWebRequest (Uri), ici il met

webRequest.KeepAlive = false; 
webRequest.MaximumAutomaticRedirections = 30; 
System.Net.ServicePointManager.MaxServicePointIdleTime = 18000; 
webRequest.AllowAutoRedirect = true; 
//webRequest.Timeout = 18000; 

et retourne l'objet de requête Web.

La nature de l'application est telle que cette méthode web ne sera probablement appelée que 50 fois par jour, donc ce n'est pas comme si le serveur s'embourbait ou quoi que ce soit, il semble plutôt que quelque chose soit configuré incorrectement.

Merci d'avance pour toute aide!

Répondre

1

Veuillez publier l'exception complète que vous voyez, y compris toutes les InnerException. Par exemple:

try { 
    using (CandidateService svc = new CandidateService()) { 
     svc.CandidateAdd(); 
    } 
} 
catch (Exception ex) { 
    string what_I_should_post = ex.ToString(); 
} 

Vous pouvez penser que c'est évident, mais la trace de la pile peut être un indice important.

Vous aurez alors envie de comprendre ce que le service fait pendant ce délai d'attente. C'est probablement en exécutant une opération de base de données pour "ajouter" le "candidat" - l'opération réussit-elle du côté du serveur? Vous voudrez peut-être alors essayer de savoir ce qui le prend si longtemps.

La structure avec les classes dérivées est quelque chose que je n'ai pas vu auparavant, mais c'est une bonne idée. Ce n'est probablement pas le problème. Je ne voudrais pas jouer avec ce code pendant le débogage, mais si vous avez des inquiétudes à ce sujet, copiez temnporarily le code d'une classe dans l'autre. De cette façon, ils auront tous les deux les mêmes paramètres WebRequest.

+0

Voici l'erreur que nous gettting (toutes les parties sont xxxx'ed à nos bibliothèques) CandidateAdd Méthode non System.Net.WebException: L'opération a expiré à System.Web.Services.Protocols.WebClientProtocol .GetWebResponse (WebRequest demande) à System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse (requête WebRequest) à System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (String methodName, objet [] paramètres) à xxxxx.yyyyyy .zzzzz.fffffffff.CandidateAdd (String InputFile) at xxxxx.yyyyyy.ServiceWrapper.CandidateAdd (information de chaîne, chaîne wsServer) – spilliton

+0

En outre, il réussit du côté serveur, nous sommes E seulement obtenir ces erreurs de notre côté. – spilliton

+0

Ok, alors je dirais que la prochaine étape est de savoir combien de temps le serveur prend pour réussir; et pourquoi ça prend autant de temps. Exemple: hier, une requête modifiée expirait. Un coup d'œil rapide avec SQL Server 2008 Activity Monitor a montré qu'il me manquait des index. Le simple fait d'accepter sa suggestion a accéléré la requête 98% –

Questions connexes