問題
IIS でホストされている WCF サービスのメソッドで絶対ファイル名 (例: C:/tinkiwinki/dipsy.lala
) を使用してサーバーに画像をSystem.Drawing.Image.Save(Stream, ImageCodecInfo, EncoderParameters)
保存すると、画像は保存されず、例外もスローされません。
バックグラウンド
ヘルパー クラスがあり、SaveJpeg
メソッドがあります。
public class Tools
{
public static void SaveJpeg(string path, Image img, int quality)
{
if (quality < 0 || quality > 100)
throw new ArgumentOutOfRangeException("Quality must be between 0 and 100.");
EncoderParameter qualityParam =
new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
img.Save(path, jpegCodec, encoderParams);
}
}
次のように WCFOperationContract
メソッドで使用します。
string destDirectory = ServerDataFilePath.ImagesPath + @"\" + uploadID.ToString();
if (!Directory.Exists(destDirectory))
Directory.CreateDirectory(destDirectory);
Tools.SaveJpeg(destDirectory + @"\" + fileName, img, 50);
staticServerDataFilePath.ImagesPath
は次のように定義されます。
public class ServerDataFilePath
{
public static string ImagesPath{ get { return ConfigurationManager.ConnectionStrings["ImagesPath"].ConnectionString; } }
}
Web.configファイルConnectionString
から取得する場所:
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<clear />
<add name="ImagesPath" connectionString="C:\testServerImagesPath\"/>
</connectionStrings>
</configuration>
質問
ローカルで実行すると完全に機能しますが、IIS を使用してテスト サーバーに展開すると、画像が保存されず、例外がスローされません。どうしてこうなった?
いくつかの制約
コードは C#、フレームワーク 4、Visual Studio 2010 Professional でビルドされています。サービスは IIS の Microsoft Windows Server 2003 R2 に展開され、サービス タイプは .NET 4 の WCF です。
助けてください。前もって感謝します。