2011-05-30 10 views
5

Tengo un ensamblado al que hace referencia un servicio WCF alojado en IIS. El ensamblaje utiliza algunos archivos XSLT y estoy confundido sobre dónde vaciar estos archivos, ya sea creando una carpeta en el proyecto de ensamblaje o en el lado del servicio WCF y cómo puedo obtener la ruta física del archivo xslt en el ensamblado.Obtención de la ruta de un archivo en un conjunto de servicios wcf

+0

¿alguna solución final al respecto? Tengo un problema similar http://stackoverflow.com/questions/22691426/get-svchost-assembly-location-path-using-svcimplementation-assembly – Kiquenet

Respuesta

0

ponerlos en una subcarpeta del ensamblaje de referencia, marcarlos como contenido y permitir Copiar al Directorio de salida.
Luego, en el código de montaje donde se necesita la ruta de acceso al archivo, obtener la ruta del conjunto de la ejecución y añadir subcarpeta esperado para la ruta, por ejemplo:

var dllPath = Path.GetDirectoryName( 
    System.Reflection.Assembly.GetExecutingAssembly().Location); 
var targetPath = Path.Combine(dllPath, "XsltFolder"); 
+2

He hecho lo que me dijiste pero recibo el siguiente error No pude encontrar una parte de la ruta 'C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporal ASP.NET Files \ root \ d5e86da5 \ 28c7474e \ assembly \ dl3 \ e3edeed7 \ 4bb2927d_561fcc01 \ AV.BackOffice.Caliber.DLL \ XSLTs \ Violations.xslt '. El GetExecutingAssembly(). Loaction no devuelve la ruta esperada, creo, pero la carpeta XSLTs se copia en el directorio de depuración. – VJAI

3

servicios WCF Desde alojadas en IIS solo tienden a copiar la DLL a la carpeta temporal y no al contenido del proyecto que está configurado para copiar a la salida, hay que hacer referencia a la base de código real de la dll.

var codeBase = System.Reflection.Assembly.GetCallingAssembly().CodeBase; 
        codeBase = codeBase.Substring(8); //Remove the "file:///" prefix in front of the actual path. 

var dir = codeBase.Substring(0, codeBase.LastIndexOf("/", System.StringComparison.Ordinal) + 1); //Cut out the dll file name. 

var file = @"ErrorMessages.xml"; 

var targetPath = dir + file; 
+0

Tengo Service.Host.dll y SvcImpl.dll (<% @ ServiceHost Service = "SvcImpl"%>) Service Host en IIS. Este código en SvcImpl.dll: 1) Assembly.GetEntryAssembly() obtiene nulo. 2) Assembly.GetExecutingAssembly() obtiene SvcImpl. 3) Assembly.GetCallingAssembly(); obtiene System.ServiceModel. ¿Cómo puedo obtener Service.Host ensamblado programáticamente en SvcImpl si Assembly.GetEntryAssembly() obtiene nulo ?. Ver detalles http://stackoverflow.com/questions/22691426/get-svchost-assembly-location-path-using-svcimplementation-assembly – Kiquenet

1

Trate de usar AppDomain.CurrentDomain.RelativeSearchPath

0

Cualquier XSLT, XML o archivos deben colocarse en relación a la carpeta raíz de la carpeta del servicio de WCF, carpeta raíz se puede lograr de la siguiente manera:

si (HttpContext.Current! = Null) { // "~ /" proporciona la carpeta física raíz del directorio virtual del Servicio WCF que esta DLL dll admite ..., // por ejemplo: E: \ PhyPath \ WCFServiceFolder \ RequestPhysicalPath = HttpContext.Current.Server. MapPath ("~ /"); }

Cuestiones relacionadas