2009-09-18 3 views
5

У нас есть служба WCF, которую мы недавно перешли с самостоятельного хостинга на IIS-хостинг. Для запуска исполняемого файла необходимо запустить Process.Start(). Это прекрасно работает, когда это резидентное, но при размещении в IIS, мы получаем ошибку:Как запустить исполняемый файл из службы WCF с поддержкой IIS?

System.ComponentModel.Win32Exception: Система не может найти указанный файл

У нас есть ехе как в каталоге бен и в корне приложения (рядом с файлом .svc.) Но, похоже, он не может найти exe.

Любая помощь будет оценена по достоинству. Благодаря!

EDIT: Я забыл упомянуть, что мы запускаем следующий код: Process.Start («LeakingWrapper.exe»);

ДАЛЬНЕЙШАЯ ИНФОРМАЦИЯ: К сожалению, у нас нет возможности переключать exe в dll, потому что это оболочка сторонней библиотеки, которая утечки памяти. Итак, мы должны включить его в свой собственный процесс, чтобы гарантировать, что наш долговременный сервис WCF не течет!

ответ

3

У вас есть установочный набор aspNetCompatibilityEnabled равным true? В этом случае, вы бы иметь HttpContext, которые могли бы попытаться использовать для вызова что-то вроде:

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

Или: что, если вы указываете полный путь к EXE, например,

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

Это вообще помогает?

Marc

+0

Мы в конечном итоге с помощью второго предложения и хранится полный путь в web.config, затем пропускают это в Process.Start(). Спасибо за помощь! – GuyBehindtheGuy

0

Ответ marc_s, вероятно, правильный.

Однако также может случиться так, что процесс не может найти файл, поскольку он не имеет прав на чтение exe-файла.

+0

Я использовал Process Monitor, чтобы убедиться, что это не проблема с разрешениями. w3wp.exe просто не смог найти исполняемый файл! – GuyBehindtheGuy

0

Чтобы использовать путь веб-службы с помощью HttpContext необходимо включить следующую строку в web.config вашего веб-службы

<configuration> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
</configuration>` 
Смежные вопросы