2014-11-04 2 views
0

У меня есть приложение веб-API, которое должно запускать скрипт Python, который, в свою очередь, запускает скрипт Perl :) делает некоторые другие данные и получает от него выходные результаты. Как я сделать это с началом процесса:Разница между запуском процесса с помощью приложения Console и приложения ASP.NET

 var start = new ProcessStartInfo() 
     { 
      FileName = _pythonPath,         //@"C:\Python27\python.exe", 
      Arguments = arguments,         //@"D:\apps\scripts\Process.py 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      RedirectStandardError = true 
     }; 

     using (Process process = Process.Start(start)) 
     { 
      using (StreamReader reader = process.StandardOutput) 
      { 
       var result = reader.ReadToEnd(); 
       var err = process.StandardError.ReadToEnd();     
       process.WaitForExit(); 

       return result; 
      } 
     } 

Сценарий внутри пытается подключиться к серверу, используя Perforce P4 Python API, а затем скрипт Perl вызова команды P4, а также. При запуске этого кода из приложения консоли все идет хорошо. Программа автоматически получает настройки Perforce (у меня есть клиент P4V со всеми указанными настройками). Но при запуске из веб-интерфейса ASP.NET он не получает настройки и говорит, что он не может согласиться: 1666 сервер (я думаю, это стандартное значение, если не указано назначение).

Я понимаю, что не так много людей используют Perforce, особенно таким образом и могут помочь здесь, но хотели бы знать, в чем разница между запуском этого скрипта из приложения Console и приложения веб-API, которые могут привести к другому поведению ,

+2

Какая учетная запись пользователя находится в пуле приложений? Попробовали ли вы запускать консольное приложение в * этой * учетной записи, а не в своей собственной (или попробуйте настроить пул приложений для запуска под своей учетной записью)? –

+0

О да, вы правы! Когда я использовал свой аккаунт для пула приложений, он работал. Я действительно пропустил эту возможность, спасибо. Теперь вопрос состоит в том, чтобы как-то указать эти переменные Perforce для учетной записи пула приложений, но я думаю, что это не относится к .NET :). Возможно, вы можете создать ответ, чтобы я мог его принять? – MyUserName

+1

Не могли бы вы просто передать переменные Perforce в скрипт вместо того, чтобы читать их из среды пользователя? –

ответ

1

Одним из наиболее очевидных различий между запуска кода из консольного приложения и запуск кода в IIS * является то, что, как правило, два куска кода будет работать под различных учетных записей пользователей.

Часто, если вы столкнулись с проблемами, когда код работает в одной из этих ситуаций, а не в другом, это разрешения или проблемы с настройками для каждого пользователя. Вы можете проверить, работает ли это консольное приложение под той же учетной записью пользователя, которая настроена для соответствующего пула приложений IIS, или наоборот, настроить пул приложений для использования вашей собственной учетной записи пользователя, а затем посмотреть, будет ли проблема сохраняется.

Если вы подтвердили, что это проблема с разрешениями и/или настройками для каждого пользователя, вам необходимо решить, как вы хотите ее исправить. Обычно я рекомендую не запускать пулы приложений IIS под своей учетной записью пользователя - если вы не можете правильно настроить параметры, которые настроены для существующего пользователя пула приложений, я бы рекомендовал создать отдельную учетную запись пользователя (локально на машине или как часть вашего домена, в зависимости от того, что требуется) и предоставить ему только разрешения/настройки, необходимые для выполнения задания.


* IIS Express является исключение здесь, потому что он не делает пулов приложений и код делает в конечном итоге работает под вашей собственной учетной записи пользователя.