2009-09-18 9 views
5

Abbiamo un servizio WCF che è passato di recente da self-hosting a IIS-hosted. È necessario avviare un file eseguibile utilizzando Process.Start(). Questo funziona bene quando si tratta di self-hosted, ma quando ospitato in IIS, otteniamo l'errore:Come posso avviare un eseguibile da un servizio WCF ospitato da IIS?

System.ComponentModel.Win32Exception: il sistema non riesce a trovare il file specificato

Abbiamo l'exe sia nella directory bin e nella root dell'applicazione (accanto al file .svc). Tuttavia, sembra impossibile trovare l'exe.

Qualsiasi aiuto sarebbe apprezzato. Grazie!

MODIFICA: Ho dimenticato di dire che stiamo lanciando usando il seguente codice: Process.Start ("LeakingWrapper.exe");

ULTERIORI INFORMAZIONI: Sfortunatamente, non abbiamo l'opzione per passare l'exe a una DLL, perché sta avvolgendo una libreria di terze parti che perde memoria. Quindi, dobbiamo metterlo nel suo stesso processo per garantire che il nostro servizio WCF a lungo termine non perda!

risposta

3

Avete l'impostazione aspNetCompatibilityEnabled impostata su true? In tal caso, si avrebbe un HttpContext, che potrebbe cercare di utilizzare per chiamare qualcosa come:

string exeFileName = HttpContext.Current.Server.MapPath("~/LeakingWrapper.exe") 

Oppure: che cosa succede se si specifica l'intero percorso del file EXE, per esempio

Process.Start("C:\yourServiceDir\bin\LeakingWrapper.exe") 

Questo aiuta affatto ??

Marc

+0

Abbiamo finito per usare il tuo secondo suggerimento e memorizzato il percorso completo nel file web.config, poi passato in Process.Start(). Grazie per l'aiuto! – GuyBehindtheGuy

0

La risposta di marc_s è probabilmente corretta.

Tuttavia, potrebbe anche essere che il processo non riesca a trovare il file perché non ha i diritti per leggere il file exe.

+0

Ho usato Process Monitor per assicurarmi che non fosse un problema di permessi. w3wp.exe non riusciva a trovare l'eseguibile! – GuyBehindtheGuy

0

Per utilizzare il percorso del servizio Web utilizzando HttpContext è necessario includere la seguente riga nel file web.config del vostro servizio web

<configuration> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
</configuration>` 
Problemi correlati