Veuillez voir la réponse d'ongle ci-dessous. C'est beaucoup mieux que celui-ci.
jour après plus d'informations
Ce qui suit a fonctionné pour moi. Je l'ai testé avec un nouveau service WCF hébergé sur IIS via un Service1.svc.
- Ajouter
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
à la configuration Web. <system.serviceModel>..</ ..>
existait déjà.
- Ajoutez
AspNetCompatibilityRequirementsAttribute
au service avec le mode Autorisé.
- 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 fait aucun changement dans 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.
<system.serviceModel>
<!-- Added only the one line below -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- Everything else was left intact -->
<behaviors>
<!-- ... -->
</behaviors>
<services>
<!-- ... -->
</services>
</system.serviceModel>
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, de sorte que le dossier de travail est légèrement ambigu.
Vous pouvez récupérer le "Dossier de travail" normal en appelant le Directory.GetCurrentDirectory().
HttpContext est un objet 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 HttpContext de la WCF. Le 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 au ASP.Net compatibility mode en le basculant dans le fichier web.config. Cela devrait vous donner accès au HttpContext ASP.Net. Cela vous limitera au * HttpBindings et à l'hébergement IIS. Pour basculer le mode de compatibilité, ajoutez ce qui suit au fichier web.config.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Cette solution fonctionnait mieux pour moi - je recommanderais de l'utiliser plutôt que d'avoir à faire toutes sortes d'autres changements de paramètres ... –
Je n'ai pas System.Web.Hosting, je ne sais vraiment pas pourquoi. . . – nXqd
@nXqd C'est dans System.Web.dll qui revient au framework 2.0 – ongle