0

問題

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 です。

助けてください。前もって感謝します。

4

1 に答える 1

5

おそらく、IIS で Web アプリを実行しているアカウントには、C:\tinkiwinkiフォルダーに対する書き込み権限がありません。

于 2012-04-17T08:16:47.953 に答える