¿Cómo obtener la ruta de trabajo de una aplicación wcf?

Quiero obtener la carpeta de trabajo de una aplicación WCF. ¿Cómo puedo obtenerlo?

Si bash

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

Obtengo una excepción de referencia nula (el objeto Http.Current es nulo).


Lo que quise decir con la carpeta de trabajo fue la carpeta donde se está ejecutando mi servicio WCF. Si configuro aspNetCompatibilityEnabled="true" , obtengo este error:

El servidor no proporcionó una respuesta significativa; esto podría deberse a una falta de coincidencia de contrato, un cierre prematuro de la sesión o un error interno del servidor.

Necesitaba la misma información para mi aplicación WCF alojada en IIS6 y descubrí que esto funcionaba para mí:

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

Como siempre, YMMV.

Por favor, vea la respuesta de ongle a continuación. Es mucho mejor que este.

Actualizado después de más información

Lo siguiente funcionó para mí. Lo probé con un nuevo servicio WCF alojado en IIS a través de un Service1.svc.

  1. Agregue a la configuración web. .. ya existía.
  2. Agregue AspNetCompatibilityRequirementsAttribute al servicio con Mode Allowed.
  3. Use HttpContext.Current.Server.MapPath("."); para obtener el directorio raíz.

A continuación se muestra el código completo de 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("."); } } 

Y a continuación se encuentra un extracto de la web.config.

            

Respuesta anterior

¿Qué quieres decir con 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 a 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 forma más sencilla podría ser ejecutar el servicio en el modo de compatibilidad ASP.Net al alternarlo en el archivo 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.

    

Dependiendo de lo que quieras Por lo general, quiero resolver una url como “~ / carpeta / archivo”. Esto es lo que funcionó.

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

Más general, estoy usando este

 AppDomain.CurrentDomain.BaseDirectory 

El aspNetCompatibilityEnabled = “true” debería haber resuelto mi problema, pero obtuve este error:

El servidor no proporcionó una respuesta significativa; esto podría deberse a una falta de coincidencia de contrato, un cierre prematuro de la sesión o un error interno del servidor.

Resolví mi problema al obtener la ruta física de mi servicio WCF en ejecución obteniéndolo desde mi dominio de aplicación actual:

 AppDomain.CurrentDomain.BaseDirectory 

Para hacer referencia a las características de ASP.NET como el objeto HttpContext, debe ejecutar su aplicación WCF en el modo de compatibilidad ASP.NET. Este artículo explica cómo hacer esto.

Use HostingEnvironment.ApplicationPhysicalPath en WCF para encontrar la ruta física de su aplicación. Use el espacio de nombres usando System.Web.Hosting;