J'ai une application Windows qui se connecte à un service de données WCF hébergé sur la même machine.
La première chose qui se produit lorsque l'application démarre est une requête qui retourne 0 à 3 résultats. Voici le code: P>
var environments = ctx.Environments .AddQueryOption("$filter", "Environment eq '" + ConfigurationManager.AppSettings["environment"] + "'") .AddQueryOption("$expand", "Departments, SecurityGroups");
3 Réponses :
Comme Weismat suggère, cela pourrait être des problèmes DNS. Si vous utilisez des noms DNS dans votre URL WCF, essayez plutôt d'utiliser Loopback IP à la place (127.0.0.1) ou de votre adresse IP locale. P>
Lorsque vous exécutez Fiddler, il agit comme un proxy pour tous les appels réseau, n'est-ce pas? Donc, probablement ce proxy répond plus vite que l'hôte DNS réel. Quelle est l'heure de connexion que vous avez définie dans la configuration de liaison? P>
J'apprécie toutes les réponses, mais à la fin, il semble que quelque chose n'allait pas avec mon environnement Develoment VS 2010. J'ai été capable de faire face à la première réponse lente en gardant Fiddler haut et courir, mais après avoir installé la suite de contrôles Telerik, mes applications prenaient près une minute pour charger un formulaire tout en débogage. Suspection Ceci était lié à l'autre question, j'ai installé VS 2012 et mis à niveau mes projets et tout fonctionne comme prévu. P>
Merci encore pour vos réponses. P>
Fiddler ne devrait pas avoir d'effets secondaires dans votre application. Vous devriez faire une enquête dans d'autres endroits.
@Darthvader: Je ne le pense pas non plus non plus, et je ne m'attendrais surtout pas une augmentation de la performance avec elle courante. Néanmoins, ça se passe.
Pourquoi ne faites-vous pas déboguer votre application et voyez ce qui provoque le retard? et déboguer pendant que le violon est en cours d'exécution. regarde la différence.
Déboguer mon application ... Pourquoi je n'ai pas pensé à ça? Non, sérieusement, c'était à propos du commentaire le plus inutile que j'ai jamais lu. :) Si vous lisez mon message, vous verrez que je l'ai fait cela. Le débogage de l'application est ce qui a révélé la différence. Lorsque des environnements.compte () évalue avec Fiddler en cours d'exécution, il faut une fraction du temps qu'il faut quand Fiddler ne fonctionne pas. Rien d'autre n'est différent. Je sais que ça sonne floconneux et c'est pourquoi j'ai posté ici - pour voir si quelqu'un d'autre l'a vécu ou a une explication.
Comment le service de données WCF est-il hébergé? Dans IIS? Cassini? IIS Express? Je ne suis pas sûr de savoir pourquoi Fiddler ferait une différence ici, mais la première pensée qui m'a eu lieu est que cela ressemble à la différence de temps est liée à la filature de l'hôte Web. Pouvez-vous vérifier si tout ce que vous hébergez est terminé dans les scénarios plus longs?
Le service de données WCF est en cours d'exécution dans une autre instance de VS2010 à l'aide de Cassini. La première fois que je cours et frappe la méthode de comptage (), il faut environ 15 secondes, chaque fois que je cours après cela environ 3 secondes. Si le violoniste est en cours d'exécution, cela prend environ 0,4 seconde à chaque fois, y compris le premier. Si je définis un point d'arrêt sur la ligne contenant l'appel à compter (), courez jusqu'au point d'arrêt, puis commencez à Fiddler, je reçois la réponse de 0,4. Donc, tant que le violon est en cours d'exécution lorsque j'appelle le nombre (), cela fonctionne bien. Aucun conseil?
Fiddler est-il défini sur le mode streaming ou non-streaming? Pas très probablement, mais cela affecterait peut-être la file d'attente sur le serveur.
Peut-être qu'il y a un problème de routage / DNS dans votre réseau. Utiliser Fiddler signifie utiliser un proxy qui aide à éviter de tels problèmes.
Le service est-il exécuté sur https ou http?
Votre variable de environnements contient un arbre d'expression stocké qui n'est pas évalué tant que la propriété de comptage est accessible; C'est une exécution différée normale dans Linq (car elle implémente des concepts de programmation fonctionnelle). Peut-être que lorsque vous exécutez un violon, vous faites autre chose que cela entraîne la mise en place de l'exécution différée sans que vous sachiez. Par exemple, dans le débogage, l'accès à l'une des propriétés de la variable entraînera l'évaluation. Ainsi, lorsque vous regardez le comptage, il semble avoir couru rapidement.
Avez-vous essayé de définir un point d'arrêt dans votre code de service Web pour voir s'il le frappe en réalité? Alternativement, si vous pouvez exécuter SQL Profiler ou quelque chose de similaire tandis que votre application est en cours d'exécution, vous devez voir que les requêtes se trouvent cependant et que vous vous direz également si le décalage est à votre base de données ou non.