Загрузка изображения в виде вложения в RESTful WCF Service - PullRequest
0 голосов
/ 31 июля 2011

Я пытаюсь загрузить изображение в виде вложения в службу REST WCF и получаю следующую ошибку. "Доступ к пути" C: \ ImageUpload "запрещен" Я включил разрешения Full Contorl для этой папки. Я не понимаю, почему я получаю эту ошибку. Я новичок в WCF, и большую часть кода я собрал с онлайн-ресурсов. Спасибо, если вы могли бы сообщить мне, если в моем коде есть какие-либо ошибки. Вот мой код.


REST WCF Service Code:

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

public void uploadImage(Stream fileStream)
        {
            string filePath = @"C:\ImageUpload";
            FileStream filetoUpload = new FileStream(filePath, FileMode.Create);

            byte[] byteArray = new byte[10000];
            int bytesRead, totalBytesRead = 0;

            do
            {
                bytesRead = fileStream.Read(byteArray, 0, byteArray.Length);
                totalBytesRead += bytesRead;
            }
            while (bytesRead > 0);
            filetoUpload.Write(byteArray, 0, byteArray.Length);
            filetoUpload.Close();
            filetoUpload.Dispose();
        }

Это мой тестовый код клиента (простая веб-страница .aspx)

 protected void btnUpload_Click(object sender, EventArgs e)
        {
            string file = FileUpload1.FileName;
            RESTService1Client client = new RESTService1Client();

            byte[] bytearray = null;
            string name = "";
            if (FileUpload1.HasFile)
            {
                name = FileUpload1.FileName;
                Stream stream = FileUpload1.FileContent;
                stream.Seek(0, SeekOrigin.Begin);
                bytearray = new byte[stream.Length];
                int count = 0;
                while (count < stream.Length)
                {
                    bytearray[count++] = Convert.ToByte(stream.ReadByte());
                }
            }  
            WebClient wclient = new WebClient();
            wclient.Headers.Add("Content-Type", "image/jpeg");
            client.uploadImage(FileUpload1.FileContent);
}

Ответы [ 2 ]

0 голосов
/ 31 июля 2011

Переписать серверную часть как таковую:

REST WCF Сервисный код:

[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));
        }  
}
0 голосов
/ 31 июля 2011

Скорее всего, это не имеет ничего общего с WCF или вашим кодом.Весьма вероятно, что разрешения для этой папки недостаточны для пользователя процесса IIS.По умолчанию пользователь ASP.NET - Сетевая служба.

Попробуйте создать нового пользователя Windows только для приложения ASP.NET.Предоставьте этому пользователю явный доступ на чтение / запись к папке загрузки.Затем используйте Олицетворение, чтобы ASP.NET использовал этого пользователя.http://www.codeproject.com/Articles/107940/Back-to-Basic-ASP-NET-Runtime-Impersonation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...