Pregunta

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

si lo intento

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

Recibo 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 ejecuta mi servicio WCF.si lo configuro aspNetCompatibilityEnabled="true", me sale este error:

El servidor no proporcionó una respuesta significativa;Esto podría deberse a una discrepancia en el contrato, un cierre prematuro de la sesión o un error interno del servidor.

¿Fue útil?

Solución

que necesitaba la misma información para mi IIS6 aplicación alojada en WCF y encontré que esto funcionó para mí:

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

Como siempre, tu caso es distinto.

Otros consejos

Consulte 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 que alojé en IIS a través de Service1.svc.

  1. Agregar <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> a la configuración web. <system.serviceModel>..</ ..> ya existía.
  2. Agregar AspNetCompatibilityRequirementsAttribute al servicio con Modo Permitido.
  3. Usar 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 ningún cambio en la interfaz IService1.

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

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

<system.serviceModel>
    <!-- Added only the one line below -->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    <!-- Everything else was left intact -->
    <behaviors>
        <!-- ... -->
    </behaviors>
    <services>
        <!-- ... -->
    </services>
</system.serviceModel>

Antigua respuesta

¿A qué te refieres con la carpeta de trabajo?Los servicios WCF se pueden alojar de varias maneras diferentes 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 Directorio.GetCurrentDirectory().

HttpContext es un objeto ASP.Net.Incluso si WCF se puede alojar en IIS, todavía no es ASP.Net y, por esa razón, la mayoría de las técnicas de ASP.Net no funcionan de forma predeterminada.OperationContext es el equivalente de WCF a HttpContext.OperationContext contiene información sobre la solicitud entrante, la respuesta saliente, entre otras cosas.

Aunque la forma más sencilla podría ser ejecutar el servicio en Modo de compatibilidad ASP.Net cambiándolo en web.config.Esto debería darle acceso a ASP.Net HttpContext.Sin embargo, lo limitará al alojamiento *HttpBindings y IIS.Para alternar el modo de compatibilidad, agregue lo siguiente a web.config.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

En función de lo que desee. Por lo general desea resolver una URL como "carpeta ~ / / archivo". Esto es lo que ha funcionado.

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

Más en general, estoy usando éste

AppDomain.CurrentDomain.BaseDirectory

El aspNetCompatibilityEnabled = "true" debería haber resuelto mi problema, pero tengo este error:

  

El servidor no dio una respuesta significativa; esto podría ser causado por un desajuste contrato, un cierre de sesión prematuro o un error interno del servidor.

resolví mi problema con la obtención de la ruta física de mi servicio WCF en marcha por la reciba de mi dominio aplicación actual:

AppDomain.CurrentDomain.BaseDirectory

Con el fin de hacer referencia a ASP.NET presenta como el objeto HttpContext, que necesita para ejecutar su aplicación WCF en modo de compatibilidad de ASP.NET. Este explica cómo hacer esto.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top