В WCF вы можете вернуть объект Stream из метода:
public Stream GetImage(string name)
{ ... }
Если у вас чистый протокол на основе SOAP, вам нужно придерживаться примитивов, таких как byte [].Это плохой вариант, но лучшего пути нет.Вам может понадобиться разбить файл на несколько частей, чтобы это работало для всех клиентов.Некоторые клиенты SOAP не разрешают большие ответы, поэтому мы обычно разбивали ответ на части по 30 тыс.
Лучший способ передачи изображения - не использовать ни один из указанных выше подходов, а выполнить HTTP-запрос непосредственно к изображению иизбегай всего этого.Это то, что мы используем сейчас, без кодирования, без обработки клиента, потоковая передача прямо на диск.Вам нужно будет изучить конкретный вариант использования, чтобы определить, можно ли это применить.