Silverlight изменяет io.Stream на byte [] - PullRequest
1 голос
/ 26 октября 2009

Я создал службу WCF для загрузки изображений, которая принимает System.IO.Stream в качестве входного параметра и использую потоковую передачу. Когда я добавил сервисную ссылку в проект Silverlight, он автоматически изменил параметр моего метода WCF с System.IO.Stream на byte[]. Может кто-нибудь предложить, если есть способ обойти это так, чтобы я мог получить тип System.IO.Stream вместо byte[].

Заранее спасибо

Ответы [ 5 ]

2 голосов
/ 26 октября 2009

Silverlight не поддерживает потоковый режим передачи: http://forums.silverlight.net/forums/t/119340.aspx

Так что я думаю, что вы застряли с получением байтового массива.

1 голос
/ 28 октября 2009

Можете ли вы проверить, что вы не используете ни одну из квот на чтение в сервисе? Вы можете попробовать увеличить их все, чтобы увидеть, решит ли это вашу проблему.

1 голос
/ 26 октября 2009

Я думаю, вам следует установить для свойства transferMode вашего basicHttpBinding правильное значение, как описано в этой статье . А затем снова добавьте сервисную ссылку в ваше приложение Silverlight.

0 голосов
/ 10 апреля 2010

Даже я боролся с той же проблемой. Наконец я получил решение сам. Все, что вы можете сделать, это:

  1. объявляет принимающий параметр как строковый массив в службе WCF.
  2. преобразовать массив байтов в строковый массив на месте клиента.
  3. После отправки преобразованного байтового массива в виде строкового массива снова преобразуйте его обратно в байтовый массив.

например. на стороне WCF:

[DataContract]
Class FileInfo  
{
 [DataMember] 
 string filename;
 [DataMember]
 string[] StrArr;
}

функция получения:

public void uploadFile(FileInfo fi)
{
 int len=fi.StrArr.len;
 byte[] myFileByte=new byte[len];

 for(int i=0;i<len;i++)
 {
  myFileByte[i]=Convert.ToByte(fi.StrArr[i]);
 }
 //your uploaded File buffer is ready as myFileByte
 //proceeding operations are most welcome here......
.........
}

На стороне клиента:

public void UploadMyFile()
{
 //Take the InputStream from the selected File as iStream;
 int len=(int)iStream.length;
 byte[] buffer=new byte[len];
 string[] MyStrArr=new string[len];

 for(int i=0;i<len;i++)
 {
  MyStrArr[i]=Convert.ToString(buffer[i]);
 } 
  //Here your string array is ready to send to the WCF Service....
  //I m confident this code will work perfectly with some file limitation consideartions. 
}
...