2010-01-08 1 views
1

Я пытаюсь отобразить изображение в окне изображения. Приложение имеет две части. Первая часть - это приложение для Windows, а вторая часть - веб-сервис (asmx).Функция возвращает System.IO.MemoryStream?

Это код для окна приложения:

Public Sub PrikazSlike() 
      Dim p As localhost.Service1 = New localhost.Service1() 
     PictureBox1.Image = Image.FromStream(p.PictureShow()) 
End Sub 

И это код для веб-сервиса:

Imports System.Web.Services 
Imports System.Web.Services.Protocols 
Imports System.ComponentModel 
Imports System.IO 

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
' <System.Web.Script.Services.ScriptService()> _ 
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ 
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
Public Class Service1 
    Inherits System.Web.Services.WebService 

    <WebMethod()> _ 
    Public Function PictureShow() As System.IO.MemoryStream 
     Dim client As New System.Net.WebClient() 
     Dim stream1 As New System.IO.MemoryStream() 
     Dim data As Byte() = client.DownloadData("http://www.psp-themes.net/.../assassins%20creed%203.jpg") 
     client.Dispose() 
     stream1.Write(data, 0, data.Length) 
     Return stream1 
    End Function 
End Class 

Проблема заключается в том, что функция в веб-службы не возвращает System.IO. Тип данных MemoryStream, поэтому я получаю сообщение об ошибке, не может преобразовать: Ошибка 1 Значение типа «WindowsApplication1.localhost.MemoryStream» не может быть преобразовано в «System.IO.Stream».

Как я могу это решить?

Большое спасибо!

Update (первоначально размещен как 'ответ')

Это код обновления для веб-сервиса:

<WebMethod()> _ 
    Public Function PrikazSlike() As Byte 
     Dim client As New System.Net.WebClient() 
     'Dim data As Byte 

     Dim data As Byte() = client.DownloadData("http://www.psp-themes.net/.../assassins%20creed%203.jpg") 
     Dim stream1 As New System.IO.MemoryStream(data) 
     client.Dispose() 
     stream1.Write(data, 0, data.Length) 
     Return Convert.ToByte(stream1) 
    End Function 
End Class 

Это код окна приложения:

Public Sub Show.Picture() 
     Dim p As localhost.Service1 = New localhost.Service1() 
     PictureBox1.Image = Image.FromStream(p.PictureShow()) 
     End Sub 

Теперь я получаю ошибку:

E rror 1 Значение типа «Byte» не может быть преобразовано в «System.IO.Stream».

ответ

0

В сообщении об ошибке указано, что ваш метод возвращает тип WindowsApplication1.localhost.MemoryStream, а не System.IO.MemoryStream.

Я подозреваю, что ваш веб-сервис настроен для возврата объекта MemoryStream. Попробуйте изменить его, чтобы вместо этого вернуть массив byte[]. На вашей стороне приема извлеките массив байтов и создайте System.IO.MemoryStream из этого массива.

+0

Хорошо. Я изменил веб-службы для возврата байт: _ Public PrikazSlike Function() As Byte Dim клиента As New System.Net.WebClient() Dim stream1 As New System.IO.MemoryStream() данные Dim As Byte () = client.DownloadData ("http://www.psp-themes.net/.../assassins%20creed%203.jpg") client.Dispose() stream1.Write (данные, 0, data.Length) Return Convert.ToByte (stream1) End Function End Class Но теперь, как я могу преобразовать байты в System.IO.MemoryStream в приложении Windows. – Comii

+0

Используйте конструктор для MemoryStream, который принимает байтовый массив. Dim stream1 As New System.IO.MemoryStream (данные) –

+0

Теперь я получаю ошибку при использовании Windows: Ошибка Значение типа «Byte» не может быть преобразовано в «System.IO.Stream». – Comii

5

Попробуйте вернуть массив байтов вместо Stream.

+4

+1, ... "с помощью метода' .ToArray() '. –

0

MemoryStream находится на сервере и не может быть сериализована для клиента.

Вы должны вернуть bytearray из своего веб-сервиса, а затем преобразовать его в изображение.

Смежные вопросы