2009-04-29 5 views
0

J'ai une webméthode de service Web .asmx que j'appelle avec succès de jquery.ajax. Le webmethod fonctionne correctement. Cependant, il fonctionne très lentement.ASP.NET Web Service WebMethod

La méthode elle-même fait très peu de travail en ce moment. J'ai ajouté CacheDuration = 120. Cela n'a pas aidé. Ma véritable préoccupation est de savoir combien de temps il faut pour appeler la méthode. Lors de l'exécution du site Web local et du débogage VS2008 avec un point d'arrêt sur la première ligne du Webmethod, il faut près de 5 secondes pour arriver à la première ligne. Puis, en continuant dans le débogueur, la réponse se produit immédiatement. Donc, la méthode web ne semble pas être la "chose" lente.

Est-ce que quelqu'un a connu un comportement similaire? Y a-t-il quelque chose que je dois définir pour que le webservice/méthode soit appelé plus rapidement?

code:

[WebService(Namespace = "http://intranet/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
[System.Web.Script.Services.ScriptService] 
public class DocumentService : System.Web.Services.WebService 
{ 

    [System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    [System.Web.Services.WebMethod(EnableSession = true, CacheDuration = 120)] 
    public Tree[] GetDocumentTree(string root) 
    {........ 
+0

Les 5 premières secondes sont susceptibles de recompiler l'application? Existe-t-il un réseau entre les applications qui ralentit les choses? – u07ch

+0

Est-il lent seulement en mode debug? Si tel est le cas, il est probablement un problème où un grand nombre de fichiers de symboles doivent être chargés afin de parcourir le code. – jellomonkey

Répondre

0

Vous pouvez utiliser Fiddler ou Firebug pour comprendre ce que la partie lente est. Assurez-vous d'avoir tapé le webservice une fois pour qu'il soit compilé avant de le chronométrer.

+0

Merci pour la suggestion. J'utilise actuellement Fiddler pour le chronométrer. Je l'ai chronométré en frappant le service directement et en laissant ma page le frapper. C'est en même temps ... en mode debug ou release. Et je l'ai laissé compiler aussi. D'autres pensées? –

0

Utilisez également JetBrains dotTrace côté serveur. Une fois que j'ai fait cela, et j'ai découvert qu'une certaine page .asmx prenait beaucoup de temps à charger à cause de l'initialisation des variables dans ses constructeurs. (Les références de service Web mettent beaucoup de temps à être construites, en particulier.)

1

Assurez-vous que votre problème ne concerne pas uniquement le temps JIT ou le temps de chargement. Au premier appel, le service web doit compiler et charger des assemblages qui peuvent être coûteux. Si le problème persiste lors d'appels ultérieurs, vérifiez vos paramètres de proxy.

Nous avons eu le même problème. Notre retard était beaucoup plus important que le vôtre (2 minutes par appel total). Nous appelions un service Web depuis un service Windows qui s'exécutait en tant qu'utilisateur de domaine. Ce compte d'utilisateur a apparemment ses paramètres proxy activés. Ainsi, pour chaque requête HttpRequest adressée au service Web local, ServicePoint a tenté d'extraire le fichier wpad.dat d'un serveur proxy inexistant. Cet appel a pris 20 secondes pour expirer. Pire, il existe un verrou global autour du code qui récupère le proxy dans les bibliothèques .net. Ainsi, les appels s'empilent en attendant le délai d'attente Web. Le service effectuant les appels est notre processus de file d'attente qui gère tous nos comportements asynchrones. Donc, le système entier sauvegardé.

Si vous voulez voir le code, regardez System.Net.AutoWebProxyScriptEngine.GetProxies dans Reflector.

Comme je ne dispose pas de droits sur le compte de l'utilisateur en question que je fixe aujourd'hui notre problème en ajoutant au fichier app.config.

Si votre méthode est destinée à être appelée avec ajax, vous devez obtenir les paramètres du navigateur corrects. Essayez de désactiver la détection automatique des paramètres dans les paramètres Connexions \ Réseau. J'ai regardé autour du web un peu après avoir trouvé le problème et apparemment IE7 aurait des problèmes de latence quand ce paramètre est activé. Si vous avez un serveur proxy, entrez manuellement l'adresse du serveur dans la même boîte de dialogue.