这是一个让我脱掉头发的问题。 TL:DR; IIS 7.5 webservice调用.exe写入文件。当我导航到.asmx页面时(不在debug / cassini中,在chrome / FF中的实际IIS中)但在我从应用程序调用服务时不起作用。最终,这个Web服务调用需要来自Windows服务调用。
// --------------------------------------------------------------------
// Use the UTMs as the corners for the projwin in the gdal_translate call below
// --------------------------------------------------------------------
string sExecutionFile = string.Empty;
if ((ConfigurationSettings.AppSettings["BIN_PATH"]!=null) && File.Exists(ConfigurationSettings.AppSettings["BIN_PATH"] + "/gdal_translate.exe"))
sExecutionFile = Path.Combine(ConfigurationSettings.AppSettings["BIN_PATH"],"gdal_translate.exe");
else
sExecutionFile = "gdal_translate.exe";
ProcessStartInfo psi = new ProcessStartInfo(sExecutionFile,
"-projwin " + pointUL[0] + " " + pointUL[1] + " " +
pointLR[0] + " " + pointLR[1] + " " +
sImageFileName + " " + sResultsFileName);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = true;
using(myProcess = new Process())
{
myProcess.StartInfo = psi;
myProcess.Start();
myProcess.WaitForExit();
myProcess.Close();
myProcess.Dispose();
}
上面的代码调用一个小exe来从另一个TIFF文件生成TIFF。它位于一个包含在webservice调用中的DLL中。我已经完成了所有工作,我可以访问我的localhost服务器,运行我创建的“DataService.asmx”页面,填写表单和biggity-bam,我的新目录中有一个TIFF(也是由webservice创建的) 。然后我写了一个小的命令行应用程序来尝试调用webservice。它很高兴地调用了webservice以及我尝试用于测试目的的其他一些服务。问题是我创建了新目录,但其中没有任何TIFF文件。调试后,我的代码抱怨上面的代码没有创建文件。 我缺少什么?
我尝试了各种IIS 7.5配置选项以及相关目录的操作系统级权限。一直到“LocalSystem”会产生与“AppPoolIdentity”,“IUSR”相同的行为......我必须相信上面的代码失败了,即使它根本没有抛出任何异常。有没有更好的方法从IIS Web服务调试ProcessStartInfo调用?我可以理解这根本不起作用,或者我是否必须将其作为管理员帐户运行才能使其工作,但是当我直接从.asmx页面调用它时,调用有效。