在IIS托管的WCF服务中保存文件

时间:2012-04-17 08:05:20

标签: c# wcf iis .net-4.0 save

问题

使用绝对文件名(例如C:/tinkiwinki/dipsy.lala)在IIS中托管的WCF服务中使用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);
    }
}

我们在这样的WCF OperationContract方法中使用它:

string destDirectory = ServerDataFilePath.ImagesPath + @"\" + uploadID.ToString();
if (!Directory.Exists(destDirectory))
    Directory.CreateDirectory(destDirectory);
Tools.SaveJpeg(destDirectory + @"\" + fileName, img, 50);

静态ServerDataFilePath.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。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:5)

您的Web应用程序在IIS上运行的帐户很可能没有C:\tinkiwinki文件夹的写权限。