2009-09-18 8 views
5

Mamy usługę WCF, którą niedawno zmieniliśmy z samodzielnego hostingu na hostowany na IIS. Musi uruchomić plik wykonywalny za pomocą metody Process.Start(). Działa to dobrze, gdy jest self-hosted, ale kiedy gościł w IIS, to pojawia się błąd:Jak mogę uruchomić plik wykonywalny z usługi WCF hostowanej w usługach IIS?

System.ComponentModel.Win32Exception: System nie może odnaleźć określonego pliku

Mamy exe zarówno w katalogu bin oraz w katalogu głównym aplikacji (obok pliku .svc). Ale nie może znaleźć exe.

Każda pomoc zostanie doceniona. Dzięki!

EDYCJA: Zapomniałem wspomnieć, że uruchamiamy za pomocą następującego kodu: Process.Start ("LeakingWrapper.exe");

DALSZE INFO: Niestety, nie mamy opcji, aby przełączyć plik exe na dll, ponieważ jest to pakowanie biblioteki innej firmy, która wycieka z pamięci. Musimy więc wprowadzić go w swój własny proces, aby zapewnić, że nasza długoletnia usługa WCF nie wycieknie!

Odpowiedz

3

Czy ustawiono wartość aspNetCompatibilityEnabled? W takim przypadku, że masz HttpContext, które mogą próbować używać nazwać coś takiego:

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

czyli co, jeśli można określić całą ścieżkę do pliku EXE, np

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

Czy to w ogóle pomaga?

Marc

+0

Skończyło się przy użyciu drugiego sugestię i przechowywać pełną ścieżkę w pliku web.config, a następnie przekazywane do Process.Start(). Dzięki za pomoc! – GuyBehindtheGuy

0

Odpowiedź marc_s jest prawdopodobnie poprawna.

Może się jednak zdarzyć, że proces nie może znaleźć pliku, ponieważ nie ma uprawnień do odczytu pliku exe.

+0

Użyłem Monitora Procesu, aby upewnić się, że nie był to problem z uprawnieniami. w3wp.exe po prostu nie mógł znaleźć pliku wykonywalnego! – GuyBehindtheGuy

0

Aby użyć ścieżkę serwis internetowy używa HttpContext musi zawierać następującą linię w pliku web.config usługi WWW za

<configuration> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
</configuration>` 
Powiązane problemy