Comment obtenir le chemin de travail d’une application wcf?

Je veux obtenir le dossier de travail d’une application WCF. Comment puis-je l’avoir?

Si j’essaye

HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath) 

J’obtiens une exception de référence null (l’object Http.Current est null).


Ce que je voulais dire avec le dossier de travail était le dossier où mon service WCF est exécuté. Si je aspNetCompatibilityEnabled="true" , j’obtiens cette erreur:

Le serveur n’a pas fourni de réponse significative. Cela peut être dû à une incompatibilité de contrat, à un arrêt prématuré de la session ou à une erreur interne du serveur.

J’avais besoin des mêmes informations pour mon application WCF hébergée sur IIS6 et j’ai constaté que cela fonctionnait pour moi:

 ssortingng apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; 

Comme toujours, YMMV.

S’il vous plaît voir la réponse d’Ongle ci-dessous. C’est beaucoup mieux que celui-ci.

Mis à jour après plus d’informations

Ce qui suit a fonctionné pour moi. Je l’ai testé avec un nouveau service WCF que j’ai hébergé sur IIS via un Service1.svc.

  1. Ajoutez à la configuration Web. .. existait déjà.
  2. Ajoutez AspNetCompatibilityRequirementsAtsortingbute au service avec Mode Allowed.
  3. Utilisez HttpContext.Current.Server.MapPath("."); pour obtenir le répertoire racine.

Vous trouverez ci-dessous le code complet de la classe de service. Je n’ai apporté aucune modification à l’interface IService1.

 [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] public class Service1 : IService1 { public void DoWork() { HttpContext.Current.Server.MapPath("."); } } 

Et ci-dessous est un extrait du web.config.

            

Vieille réponse

Que voulez-vous dire par le dossier de travail? Les services WCF peuvent être hébergés de différentes manières et avec des points de terminaison différents, ce qui rend le dossier de travail légèrement ambigu.

Vous pouvez récupérer le “dossier de travail” normal en appelant Directory.GetCurrentDirectory () .

HttpContext est un object ASP.Net. Même si WCF peut être hébergé sur IIS, ce n’est toujours pas ASP.Net et pour cette raison la plupart des techniques ASP.Net ne fonctionnent pas par défaut. OperationContext est l’équivalent de WCF de HttpContext. OperationContext contient des informations sur la demande entrante, la réponse sortante, entre autres choses.

Bien que le moyen le plus simple soit d’exécuter le service en mode de compatibilité ASP.Net en le basculant dans le fichier web.config. Cela devrait vous donner access à ASPTNet HttpContext. Cela vous limitera à l’hébergement * HttpBindings et IIS. Pour basculer le mode de compatibilité, ajoutez ce qui suit au fichier web.config.

    

Selon ce que vous voulez. Je veux généralement résoudre une URL comme “~ / dossier / fichier”. C’est ce qui a fonctionné.

 System.Web.Hosting.HostingEnvironment.MapPath("~/folder/file"); 

Plus général, j’utilise celui-ci

 AppDomain.CurrentDomain.BaseDirectory 

Le aspNetCompatibilityEnabled = “true” devrait avoir résolu mon problème, mais j’ai cette erreur:

Le serveur n’a pas fourni de réponse significative. Cela peut être dû à une incompatibilité de contrat, à un arrêt prématuré de la session ou à une erreur interne du serveur.

J’ai résolu mon problème en obtenant le chemin physique de mon service WCF en cours d’exécution en le récupérant depuis mon domaine d’application actuel:

 AppDomain.CurrentDomain.BaseDirectory 

Pour référencer des fonctionnalités ASP.NET telles que l’object HttpContext, vous devez exécuter votre application WCF en mode de compatibilité ASP.NET. Cet article explique comment procéder.

Utilisez HostingEnvironment.ApplicationPhysicalPath dans WCF pour rechercher le chemin physique de votre application. Utilisez un espace de noms à l’aide de System.Web.Hosting;