2009-09-08 6 views
4

J'ai un service Web .NET 2.0 fonctionnant sur IIS 7.0. Je consomme ce service à partir d'une application écrite compacte (CF 2.0). Le premier appel prend 13 secondes, tous les appels suivants sont super rapides (moins de 1 seconde). Aucune donnée n'est mise en cache.Le premier appel au service Web est lent. consommé par le cadre compact gagnez l'application

Des idées pour résoudre ce problème?

+0

Est-ce le premier appel par session? Ou est-ce le premier appel après le chargement du service lui-même dans la mémoire? –

+0

voir mes commentaires à la réponse Traveller Tech Guy. – sarsnake

+0

Y a-t-il quelque chose du côté client que je devrais devoir accélérer? – sarsnake

Répondre

5

Le premier appel sous une application FC est lorsque tous les objets proxy sur le périphérique sont créés. Donc, même si les objets, etc. sur le serveur sont déjà tournés vers le haut, le premier appel de chaque périphérique va être sensiblement plus lent que n'importe quel appel ultérieur. Une solution de contournement commune consiste à demander à votre service d'exposer une méthode stub (elle ne peut absolument rien faire si vous le souhaitez) et lorsque votre application démarre, elle génère un thread de travail qui appelle ce stub. Cela créera les objets proxy de service en arrière-plan pour vous, alors lorsque votre application appelle réellement le service, tout est prêt.

+0

ok, cela a plus de sens, merci! une chose que je ne comprends pas alors, c'est pourquoi si souvent l'appel prendra plus de temps, puis quelques appels rapides, puis un appel long. C'est presque comme si un travail cron s'exécutait sur le client léger qui supprimait les objets proxy. – sarsnake

+0

puis-je avoir un certain contrôle de ces objets proxy? – sarsnake

+0

ma conjecture est que les proxys JITTted sont mis en place et doivent être re-JITTED. Le moniteur de performances à distance peut vérifier cela - regardez pour voir si vous avez un pitch dans la collection juste avant un appel long. Vous n'avez vraiment aucun contrôle sur les objets proxy, ils sont construits au besoin, et comme tout autre objet géré, le code peut être lancé si le GC le juge nécessaire. – ctacke

0

Est-ce le premier appel à l'IIS après son démarrage ou le démarrage du serveur?
Le premier appel à IIS est toujours plus lent. Nous avions l'habitude de le résoudre en ayant un script qui a fabriqué un appel factice au redémarrage ou IISRESET, pour absorber la pénalité du premier appel.

+0

l'IIS est toujours allumé. Jamais redémarré. le premier appel au service Web de l'application de bureau des FC est lent, puis tous les appels suivants sont super rapides pendant environ 3 minutes, après il y a un appel lent, et ainsi de suite. – sarsnake

+0

Il peut s'agir d'un redémarrage de votre pool d'applications, comme le suggère la réponse ci-dessous, ou peut-être de quelque chose de physique avec le serveur, comme un disque dur qui tourne pour économiser l'énergie. Les paramètres de mise en cache sont également à vérifier. –

+0

est ce comportement normal pour un service Web? être lent la première fois? ou devrait-il être rapide tout de suite? En regardant les forums, j'ai des opinions contradictoires. – sarsnake

3

Le premier appel charge le .NET Runtime et JIT les méthodes Web appelées. Beaucoup de magasins qui déploient des services en tant que tels ne se soucient pas vraiment de la première fois, mais quand ils le font, ils auront quelque chose à appeler dans le cadre du déploiement pour obtenir cette première fois hors de la route. Une autre méthode consiste à NGEN il.

+0

plus de détails s'il vous plaît. 1) est-il installé sur le client? serveur Web? 2) si sur le client, ça marche pour WinCE, CF 2.0? – sarsnake

+0

Vous le ferez sur le serveur. Le service Web de votre serveur est ASP.NET 2.0 et effectue probablement des tâches lourdes telles que l'obtention de données à partir d'une base de données, etc. Il y a très peu de temps de ces 17 secondes passées sur le côté client. Vérifiez également votre fichier global.asax.cs pour voir s'il y a des routines de configuration qui s'exécutent à la première demande et qui peuvent retarder certaines de celles-ci pour répartir le travail. –

+0

merci Jesse, je mets des minuteurs maintenant. – sarsnake

0

La première fois que l'application est appelée, vos connexions sql sont ouvertes. S'il y a des problèmes de réseau cela peut prendre plus de temps. Après une période d'inactivité de l'application, la connexion peut être automatiquement fermée.

+0

depuis que je teste le service Web avec différents paramètres pendant la période où il est rapide, la connexion réseau semble bien. Comme je l'ai dit, aucune donnée n'est mise en cache, donc si le réseau posait problème, il s'afficherait à chaque fois, n'est-ce pas? cela semble trop une coïncidence. Je pense qu'il me manque quelque chose. La question est quoi. – sarsnake

Questions connexes