Veuillez consulter la réponse d'ongle ci-dessous. Elle est bien meilleure que celle-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.
- Ajouter
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
à la configuration web. <system.serviceModel>..</ ..>
existait déjà.
- Ajouter
AspNetCompatibilityRequirementsAttribute
au service avec le mode autorisé.
- Utilice
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, 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>
Ancienne réponse
Qu'entendez-vous par Dossier de travail ? Les services WCF peuvent être hébergés de plusieurs façons différentes et avec différents points de terminaison, donc le dossier de travail est légèrement ambigu.
Vous pouvez récupérer le "dossier de travail" normal avec un appel à Répertoire.GetCurrentDirectory() .
HttpContext est un objet d'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 WCF. L'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 dans l'onglet Mode de compatibilité ASP.Net en le désactivant dans le web.config. Cela devrait vous donner accès au HttpContext d'ASP.Net. Cependant, cela vous limitera aux *HttpBindings et à l'hébergement IIS. Pour activer le mode de compatibilité, ajoutez ce qui suit au fichier web.config.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>