Как читать двоичные данные / изображения из WCF REST - PullRequest
0 голосов
/ 07 июля 2010

У меня есть следующее:

Открытый интерфейс INorthwindSvc

<OperationContract()>
<WebGet(UriTemplate:="EmployeePictureBytes?id={EmpId}")>
Function GetEmployeePictureBytesById(ByVal EmpId As String) As Byte()

Конечный интерфейс

Я реализовал метод (используя EF 4.0) следующим образом:

Public Function GetEmployeePictureBytesById(ByVal EmpId As String) As Byte() Implements INorthwindSvc.GetEmployeePictureBytesById
    Dim ctxt As New NorthwindEntities
    Dim q = From c In ctxt.Employees
            Where c.EmployeeID = EmpId
            Select c.Photo

    Return q.FirstOrDefault
End Function

Я могу получать байты при доступе к операции из браузера.Если я пытаюсь получить доступ к тому же файлу с помощью Win Client следующим образом (возникает ошибка, как показано на рисунке):

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim o As New WebClient
    Dim b() As Byte = o.DownloadData(New Uri("http://localhost:8732/WcfWebHttpSvcLib/rest/EmployeePictureBytes?id=2"))

    Dim ms As New MemoryStream()
    ms.Write(b, 0, b.Length)

    Dim original As New System.Drawing.Bitmap(ms) 'error: parameter is not valid

End Sub

Я также пытался сделать то же самое, используя Image.FromStream.Но все равно не повезло.

Может ли кто-нибудь помочь мне в этом?

спасибо

1 Ответ

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

Вы не перематываете поток памяти после записи в него, поэтому попытка чтения из него завершится неудачно. Это говорит о том, что это даже не нужно, поскольку вы можете просто написать:

im ms As New MemoryStream(b)
' now call FromStream
...