我有一些在 ASP.NET 应用程序中运行的代码,该应用程序运行一个命令行进程,该进程使用 PSCP.EXE (Putty) 将文件从外部 Linux 服务器复制到本地服务器。当我在 Visual Studio 2010 中使用 Run 命令以交互方式运行 ASP.NET 应用程序时,它运行良好。但是,当我将应用程序部署到 IIS(在同一台服务器上!)并尝试运行它时,我从 PSCP.EXE 命令行返回错误。错误是这样的:
致命:网络错误:连接超时
我对那个 PSCP.EXE 错误做了一些研究,我发现的唯一一件事是人们建议需要指定端口。但我认为这不适用于我,因为当我通过 Visual Studio 运行应用程序时它可以正常工作。
有谁知道为什么在我的机器上从 IIS 7 运行命令时会出现连接超时错误,但是当我在同一个机器上通过 Visual Studio 运行它时它工作正常?
这是我的代码:
string _pscpExePath = ConfigurationManager.AppSettings["PSCPExePath"];
string _localOptionsFolder = ConfigurationManager.AppSettings["LocalOptionsFileFolder"];
string _remoteOptionsLocation = ConfigurationManager.AppSettings["RemoteOptionsFileLocation"];
ProcessStartInfo _procStartInfo = new ProcessStartInfo("cmd", "/c " + _pscpExePath + " -pw " + App.ConfigData.ModemAdminPassword + " root@" + App.ConfigData.ModemIPAddress + ":" + _remoteOptionsLocation + " " + _localOptionsFolder);
_procStartInfo.RedirectStandardOutput = true;
_procStartInfo.RedirectStandardError = true;
_procStartInfo.UseShellExecute = false;
_procStartInfo.CreateNoWindow = true;
using (Process _proc = Process.Start(_procStartInfo))
{
using (StreamReader _reader = _proc.StandardOutput)
{
string _result = _reader.ReadToEnd();
log.Info("Get Options File Result = " + _result);
}
using (StreamReader _error = _proc.StandardError)
{
string _result = _error.ReadToEnd();
log.Info("Get Options File Error = " + _result);
}
}