Каков наилучший способ передачи изображения через веб-сервис в C #? - PullRequest
5 голосов
/ 24 июля 2010

Как лучше всего передать изображение в C #?

  • Растровый объект
  • Массив байтов
  • Объект изображения?

Ответы [ 4 ]

6 голосов
/ 24 июля 2010

Не существует единого «лучшего» способа. Если бы были, то, вероятно, был бы только один путь. Это действительно зависит от вашей ситуации, потребностей и приоритетов.

Тем не менее, я использую кодирование Base64 при каждой возможности, потому что это весело и просто! :)

2 голосов
/ 24 июля 2010

В WCF вы можете вернуть объект Stream из метода:

public Stream GetImage(string name)
{ ... }

Если у вас чистый протокол на основе SOAP, вам нужно придерживаться примитивов, таких как byte [].Это плохой вариант, но лучшего пути нет.Вам может понадобиться разбить файл на несколько частей, чтобы это работало для всех клиентов.Некоторые клиенты SOAP не разрешают большие ответы, поэтому мы обычно разбивали ответ на части по 30 тыс.

Лучший способ передачи изображения - не использовать ни один из указанных выше подходов, а выполнить HTTP-запрос непосредственно к изображению иизбегай всего этого.Это то, что мы используем сейчас, без кодирования, без обработки клиента, потоковая передача прямо на диск.Вам нужно будет изучить конкретный вариант использования, чтобы определить, можно ли это применить.

1 голос
/ 24 июля 2010

Недавно я реализовал это с помощью службы WCF и решил использовать Byte [] в качестве метода транспортировки файла, поскольку его было довольно просто реализовать:

public byte[] DownloadFile(string fileName)
{
    var stream = System.IO.File.OpenRead(fileName);

    byte[] fileContent = new byte[stream.Length];
    stream.Read(fileContent, 0, fileContent.Length);

    return fileContent;
}

Упомянутый выше пример упрощентак как я не передавал имя файла непосредственно службе WCF, но я уверен, что вы поняли общую идею =)

0 голосов
/ 25 июля 2010

Вы также можете вернуть только URL-адрес изображения и затем позволить клиенту выполнить необработанный HTTP-вызов возвращенного URL-адреса для получения изображения. Спасибо
VM

...