これは私が髪を引っ張っている問題です。 TL:DR; IIS 7.5 Web サービスは、ファイルを書き込む .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 を生成します。これは、Web サービス呼び出しにラップされた DLL にあります。すべてが機能しており、ローカルホスト サーバーに移動し、作成した "DataService.asmx" ページを実行し、フォームに入力して biggity-bam を実行すると、新しいディレクトリに TIFF が作成されます (これも Web サービスによって作成されます)。 . 次に、Web サービスを呼び出すための小さなコマンドライン アプリケーションを作成しました。テスト目的で試したWebサービスと他のいくつかを喜んで呼び出します。問題は、新しいディレクトリが作成されることですが、その中に TIFF ファイルがまったくないことです。デバッグ後、私のコードは、上記のコードがファイルを作成しなかったと不平を言っています。私は何が欠けていますか?
さまざまな IIS 7.5 構成オプションと、関連するディレクトリに対する OS レベルのアクセス許可を試しました。「LocalSystem」までずっと行くと、「AppPoolIdentity」、「IUSR」まで行くのと同じ動作が得られます...例外がまったくスローされていなくても、上記のコードは失敗していると信じなければなりません。IIS Web サービスからの ProcessStartInfo 呼び出しをデバッグするより良い方法はありますか? これがまったく機能しないのか、それとも機能させるために管理者アカウントとして実行する必要があるのか は理解できましたが、.asmx ページから直接呼び出すと呼び出しが機能します。