다음과 같은 비동기 컨트롤러 작업을 통해 원격 서버에서 콘솔 응용 프로그램을 시작할 수 있습니다. 내 문제는 사용 권한과 인증에 관한 것입니다. 나는 다음을 시도했다 내 이해에 app.Start(valuationDate)
이 가장 된 사용자으로 실행되도록 허용합니다. 그 이유는 콘솔 응용 프로그램이 네트워크 리소스에 액세스해야하고이 웹 응용 프로그램의 사용자에게 필요한 액세스 권한이 있어야하기 때문입니다. (콘솔 앱은 오류없이 예약 된 작업으로 실행됩니다.)인증 된 사용자 자격 증명을 사용하여 asp.net에서 콘솔 응용 프로그램 시작
콘솔 앱이 네트워크 리소스 "액세스 거부"오류를 발생시키는 IIS 앱 풀 ID로 계속 실행되는 것 같습니다. 콘솔 응용 프로그램 자체가 시작되지만 IIS 사용자 계정의 제한된 액세스로 인해 오류가 발생합니다.
인증 된 사용자로 실행되도록 AppPool ID를 변경하려고 시도했지만 프로세스가 올바르게 실행됩니다. 서버에서 AppPool ID를 변경하지 않아도되는 솔루션을 기대하고 있습니다.
인증 된 사용자 세부 정보를 사용하여 콘솔 응용 프로그램을 시작하려면 어떻게해야합니까?
컨트롤러 작업 :
[HttpPost]
public void RunAsync(DateTime valuationDate)
{
AsyncManager.OutstandingOperations.Increment();
Task.Factory.StartNew(() => RunApp(valuationDate));
}
private void RunApp(DateTime valuationDate)
{
ConsoleWrapper app = new ConsoleWrapper();
WindowsIdentity winId = (WindowsIdentity)HttpContext.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
ctx = winId.Impersonate();
app.Start(valuationDate);
}
catch (Exception e)
{
throw;
}
finally
{
if (ctx != null) {ctx.Undo();}
}
AsyncManager.Parameters["success"] = app.Success();
AsyncManager.Parameters["message"] = app.Message();
AsyncManager.OutstandingOperations.Decrement();
}
ConsoleWrapper :
public void Start(DateTime valuationDate)
{
var appExe = Config.Default.CONSOLE_APP;
InProgress = true;
log = String.Empty;
success = false;
message = String.Empty;
try
{
var process = new Process();
process.StartInfo.FileName = appExe;
process.StartInfo.Arguments = valuationDate.ToString("dd-MMM-yyyy");
process.EnableRaisingEvents = true;
process.StartInfo.UseShellExecute = true;
process.StartInfo.RedirectStandardOutput = true;
process.Exited += new EventHandler(process_Exited);
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.Start();
process.WaitForExit();
}
catch (Exception e){/* snip */}
}
위임 외에 다른 방법이 있습니까? 아마도 프로그램 적 관점에서 볼 때? – Ahmad
@Ahmad, 당신은 프로그래밍 방식으로 할 수 있지만 당신이 생각하지 않는 클라이언트의 암호를 알아야합니다. 암호를 모르면 위임을 설정해야합니다. 또 다른 가능성은 콘솔 응용 프로그램을 실행하는 데 항상 사용되는 일반 계정을 갖는 것입니다. –
감사합니다. 다린, 생각만큼 많이. 도메인 acount/AppPool 조합을 사용하는 것이 가장 간단 할 것 같습니다. 위임 옵션을 테스트 하겠지만 IT 부서가 진도를 저해 할까봐 걱정합니다. – Ahmad