С# WCF JSON WebService для возврата изображения типа mime/png

Я запускаю веб-сервис WCF, используя форматирование JSON следующим образом. Моя проблема в том, что формат ответа alowas Json или XML, но для GetImage я хотел бы вернуть изображение как изображение типа mime-png. Любая идея, как это сделать в WCF? Заранее спасибо.

[ServiceContract]
public interface IEditor
{
    [OperationContract]
    [WebInvoke(Method = "GET", UriTemplate = "/GetImage", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
    byte[] GetImage();

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetBounds", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
void GetBounds(out Rectangle bounds, out Point[] viewport);

person Matthias    schedule 10.09.2013    source источник


Ответы (1)


  1. используйте 1_

  2. вернуть Stream

Ваш метод должен быть примерно таким

[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetImage", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
public Stream GetImage()
{
    var m = new MemoryStream();
    //Fill m

    // very important!!! otherwise the client will receive content-length:0
    m.Position = 0;

    WebOperationContext.Current.OutgoingResponse.ContentType = "image/png";
    WebOperationContext.Current.OutgoingResponse.ContentLength = m.Length;
    return m;
}
person I4V    schedule 10.09.2013
comment
А как бы вы прочитали изображение на другой стороне? Поблочно с BeginRead? Следующий код выдает недопустимый параметр исключения Stream data = client.GetImage(); canvas.Image = (Bitmap)Bitmap.FromStream(data); - person Matthias; 10.09.2013
comment
Подобно чтению изображения с веб-сайта. Введите его URL-адрес в браузер и посмотрите результат. - person I4V; 10.09.2013
comment
Даже если я включил транспортный режим Streamed или StreamedResponse, как на клиенте, так и на сервере я получаю исключение при чтении изображения. Я все еще пытаюсь понять, как читать поток. Код выложу позже. - person Matthias; 10.09.2013
comment
Я пытался следовать этой статье но даже если я установлю длину содержимого, клиент увидит длину содержимого: 0 - person Matthias; 10.09.2013
comment
Я изменил ваш код выше. Вы ДОЛЖНЫ сбросить позицию потока памяти на 0. - person Matthias; 10.09.2013