Consulte la respuesta de ongle a continuación. Es mucho mejor que este.
actualiza después de más información
Los siguientes trabajó para mí. Lo probé con un nuevo servicio WCF alojado en IIS a través de un Service1.svc.
- Agregue
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
a la configuración web. <system.serviceModel>..</ ..>
ya existía.
- Agregue
AspNetCompatibilityRequirementsAttribute
al servicio con Modo Permitido.
- Usa
HttpContext.Current.Server.MapPath(".");
para obtener el directorio raíz.
A continuación se muestra el código completo para la clase de servicio. No hice cambios en la interfaz IService1.
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public void DoWork()
{
HttpContext.Current.Server.MapPath(".");
}
}
A continuación, un extracto de la web.config.
<system.serviceModel>
<!-- Added only the one line below -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- Everything else was left intact -->
<behaviors>
<!-- ... -->
</behaviors>
<services>
<!-- ... -->
</services>
</system.serviceModel>
respuesta Antiguo
¿Qué quiere decir por la carpeta de trabajo? Los servicios de WCF se pueden alojar de diferentes maneras y con diferentes puntos finales, por lo que la carpeta de trabajo es ligeramente ambigua.
Puede recuperar la "carpeta de trabajo" normal con una llamada al Directory.GetCurrentDirectory().
HttpContext es un objeto ASP.Net. Incluso si WCF puede hospedarse en IIS, todavía no es ASP.Net y por esa razón la mayoría de las técnicas ASP.Net no funcionan de manera predeterminada. OperationContext es el equivalente de WCF de HttpContext. OperationContext contiene información sobre la solicitud entrante, respuesta saliente, entre otras cosas.
Aunque la manera más fácil podría ser ejecutar el servicio en ASP.Net compatibility mode al alternarlo en el web.config. Esto debería darle acceso al ASP.Net HttpContext. Sin embargo, lo limitará a * HttpBindings e IIS hosting. Para alternar el modo de compatibilidad, agregue lo siguiente a web.config.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Esta solución funcionó mejor para mí, recomiendo usarla en lugar de tener que realizar todo tipo de cambios en otras configuraciones ... –
No tengo System.Web.Hosting, realmente no sé la razón por la cual. . . – nXqd
@nXqd Está en System.Web.dll volviendo al marco 2.0 – ongle