Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

  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. 
}
scroll top