C# 在RESTful WCF服务中将图像作为附件上载

C# 在RESTful WCF服务中将图像作为附件上载,c#,wcf,rest,C#,Wcf,Rest,我试图在REST WCF服务中将一个图像作为附件上传,但出现以下错误。 对路径“C:\ImageUpload”的访问被拒绝 我已启用对此文件夹的完全控制权限。我不明白为什么我会犯这个错误。 我是WCF的新手,而且大部分代码都是从在线资源中收集的。 如果您能让我知道我的代码中有任何错误,我将不胜感激。 这是我的密码 这是我的测试客户端代码(Simple.aspx网页) protectedvoidbtnupload\u单击(对象发送方,事件参数e) { string file=FileUplo

我试图在REST WCF服务中将一个图像作为附件上传,但出现以下错误。 对路径“C:\ImageUpload”的访问被拒绝 我已启用对此文件夹的完全控制权限。我不明白为什么我会犯这个错误。 我是WCF的新手,而且大部分代码都是从在线资源中收集的。 如果您能让我知道我的代码中有任何错误,我将不胜感激。 这是我的密码




这是我的测试客户端代码(Simple.aspx网页)

protectedvoidbtnupload\u单击(对象发送方,事件参数e)
{
string file=FileUpload1.FileName;
RESTService1Client客户端=新的RESTService1Client();
字节[]bytearray=null;
字符串名称=”;
if(FileUpload1.HasFile)
{
name=FileUpload1.FileName;
Stream=文件上传1.FileContent;
stream.Seek(0,SeekOrigin.Begin);
bytearray=新字节[stream.Length];
整数计数=0;
while(计数<流长度)
{
bytearray[count++]=Convert.ToByte(stream.ReadByte());
}
}  
WebClient wclient=新的WebClient();
wclient.Headers.Add(“内容类型”、“图像/jpeg”);
client.uploadImage(FileUpload1.FileContent);
}

这可能与WCF或您的代码无关。对于IIS进程用户来说,该文件夹上的权限很可能不足。默认情况下,ASP.NET用户是网络服务

尝试仅为ASP.NET应用程序创建新的Windows用户。授予该用户对上载文件夹的显式读/写访问权限。然后使用模拟使ASP.NET使用该用户。
将服务器端重写为:

 protected void btnUpload_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            RESTService1Client client = new RESTService1Client();

            client.uploadImage(FileUpload1.FileContent, Path.GetFileName(FileUpload1.FileName));
        }  
}
REST WCF服务代码:

[OperationContract]
[WebInvoke(UriTemplate = "uploadImage/{parameter1}/{parameter2}")]
void uploadImage(Stream fileStream, string fileName);

以及您的客户方:

 protected void btnUpload_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            RESTService1Client client = new RESTService1Client();

            client.uploadImage(FileUpload1.FileContent, Path.GetFileName(FileUpload1.FileName));
        }  
}

您将完全控制权限授予了哪个用户?您确定WCF服务正在该帐户下运行吗?WCF服务和客户端都位于我的本地系统上。我授予了在“ImageUpload”文件夹的“security”选项卡下找到的所有用户的完全访问权限。尝试授予“Everyone”访问权限。我尝试授予“Everyone”访问权限。还是不行,这家伙的最新消息。谢谢你,我根本没有测试过这个,但是原始代码中有一些明显的bug,一旦删除,可能会让你有进步。嗨,杰西,谢谢你花时间为我写代码。我尝试了你的代码,我得到了以下错误。“要使操作uploadImage中的请求成为流,该操作必须有一个类型为stream的参数”。你知道是什么导致了这个错误。再次感谢您的时间。嗯,错误正好说明了问题所在-不能有两个参数(我添加的fileName参数)。可能需要尝试以不同的方式从客户端到服务器(或在服务器上生成)获取文件名。
[OperationContract]
[WebInvoke(UriTemplate = "uploadImage/{parameter1}/{parameter2}")]
void uploadImage(Stream fileStream, string fileName);
public void uploadImage(Stream fileStream, string fileName)
    {
        string filePath = @"C:\ImageUpload\";
        using (FileStream filetoUpload = new FileStream(filePath + fileName, FileMode.Create))
        {
            byte[] byteArray = new byte[10000];
            int bytesRead = 0;

            do
            {
                bytesRead = fileStream.Read(byteArray, 0, byteArray.Length);
                if (bytesRead > 0)
                {
                    filetoUpload.Write(byteArray, 0, bytesRead);
                }
            }

            while (bytesRead > 0);
        }
    }
 protected void btnUpload_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            RESTService1Client client = new RESTService1Client();

            client.uploadImage(FileUpload1.FileContent, Path.GetFileName(FileUpload1.FileName));
        }  
}