2010-09-09 15 views
1

Je suis actuellement en train d'exécuter un service WCF sur un serveur AppFabric et mon application doit charger dynamiquement le fichier web.config pour récupérer les sections de configuration personnalisées.Comment récupérer sur quel site l'application Web est actuellement en cours d'exécution?

Sur ma machine de développement, je peux charger la configuration comme ceci:

WebConfigurationManager.OpenMappedWebConfiguration(webMappedFile, virtualPath); 

Mais sur la machine de test (serveur AppFabric) Je reçois une exception et il semble que je dois spécifier un troisième paramètre qui est en fait le site de l'application Web est en cours d'exécution sur:

WebConfigurationManager.OpenMappedWebConfiguration(webMappedFile, virtualPath, "MySite"); 

J'ai donc essayé de coder en dur et cela a fonctionné. Quoi qu'il en soit, ce n'est pas acceptable, je dois donc fournir dynamiquement le site à WebConfigurationManager car je ne sais pas sur quel site le service sera exécuté dans le futur. Est-ce que quelqu'un sait comment y parvenir?

Merci.

Répondre

0

Si vous utilisez ce code dans le cadre de la manipulation d'une demande, vous pouvez utiliser:

Request.ServerVariables("server_name") 

voir: http://msdn.microsoft.com/en-us/library/ms525396(VS.90).aspx

Modifier en fonction de votre commentaire

Le paramètre que vous avez besoin est le nom du site, pas le nom de la machine, votre code fonctionne sur plusieurs machines. Si le code s'exécute quelque part où il ne sait plus qu'il se trouve sur un site Web, il lui est alors difficile d'obtenir le nom du site Web sur lequel il s'exécute.

Vous avez alors deux options:

  • Envoyer le nom comme paramètre d'une couche qui a httpconext
  • Je ne sais pas si cela va fonctionner: mais vous pourriez essayer d'ajouter une référence à System.web à votre projet. Il peut compiler, mais vous pourriez obtenir une exception de référence nulle lorsque vous l'exécutez. Probablement la peine d'essayer.
+0

Le code responsable du chargement de la configuration est en fait dans un assemblage C# et ne semble pas avoir de HttpContext lors de l'exécution du ASP.NET Dev Server (l'un Visual Studio utilise pour deploy) . Quoi qu'il en soit, cela me semble logique. – Ucodia