Является ли Stream лучшим способом передачи данных изображения между клиентом и сервером, или мне следует использовать Byte []?
Это будет зависеть от используемой вами привязки, но с SOAP, даже если вы в конечном итоге выберете Stream, когда сериализатору потребуется отправить его по проводам, это будет байтовый массив в кодировке base64.
Для списка было бы разумно добавить новое свойство Image в ProductInfo типа Stream (или Byte []) или потребовать отдельного вызова службы для загрузки изображения?
Я бы пошел с отдельным звонком, чтобы загрузить каждое изображение с указанным идентификатором продукта. Таким образом, вы не будете загружать изображения каждый раз, когда хотите просмотреть информацию о продукте без предварительного просмотра, что может сэкономить пропускную способность.
Другая возможность - загрузить все изображения за один раз из службы WCF, а затем вызвать действие контроллера, которое загрузит их с помощью AJAX. Затем вставьте их в HTML как данные base64 (как Google делает с предварительным просмотром изображений на странице результатов)
Аналогично для редактирования, нужно ли просто обрабатывать данные изображения как любое другое свойство и передавать их назад и вперед по проводу, используя свойство Image?
Для редактирования у вас может быть служебный метод, который будет принимать массив байтов и идентификатор элемента, который вы обновляете.