2016-09-19 3 views
1

Мы используем websocket-sharp в одном из наших приложений, который устанавливает соединение с нашим концентратором SignalR на сервере, мы можем отправлять текстовые сообщения и получать ответ за одно и то же, но не можем отправлять byte[].Как отправить файл в центр SignalR От websocket-sharp Client?

Код для отправки текста на сервер это:

public void TestGroupData(string groupname) 
{ 
    DataCarrier dataCarrier = new DataCarrier() 
    { 
     H = "BILHub", 
     M = "GetAllGroupsFor", 
     A = new string[] { groupname } 
    }; 
    string wsPacket = JsonConvert.SerializeObject(payLoad); 
    this._ws.Send(wsPacket); 
    //this.MakeServerCall(dataCarrier); 
} 

Когда мы пытаемся отправить byte[], используя код, приведенный ниже, его не будет через:

public void TestFileData() 
{ 
    try 
    { 
     // Read the file data 
     Console.WriteLine("Started reading file"); 
     string fileName = @"C:\Saurabh\Data\Song.mp3"; 
     byte[] file = File.ReadAllBytes(fileName); 
     DataCarrier dataCarrier = new DataCarrier() 
     { 
      H = "BILHub", 
      M = "SendFile", 
      A = new object[] { file } 
     }; 
     string wsPacket = JsonConvert.SerializeObject(dataCarrier); 
     this._ws.SendAsync(file , OnSendComplete); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
     //throw; 
    } 
} 

Любая помощь с этим? Как установить имя моего концентратора в _ws.sendAsync()?

+0

Как было предложено @bsoulier, использование signalR отправить пример сообщения в режиме реального времени * ваш mp3 готов для скачивания, и как только вы получите сообщение, загрузите mp3 с api * – Eldho

+0

Мне любопытно. Почему вы используете websocket-sharp, а не клиент SignalR? – xleon

+0

Наши клиентские приложения разрабатываются с использованием xamarin, а клиент signalr не поддерживает websocket o mono platfrom, что заставило нас использовать websocket-sharb. @xleon –

ответ

5

Sending big files на самом деле не является тем, для чего предназначен SignalR.

SignalR хорош для в режиме реального времени обмен сообщениями целей между сервером & клиентов, за сравнительно небольших размеров сообщений (как messahe размер имеет real impact on performance).

Для такой необходимости я хотел бы посмотреть в ASP.NET Web API, особенно при использовании chunked upload (файла расщепления в нескольких частях, чтобы избежать прерывания соединения)

+0

Будет здорово, если вы добавите дополнительные данные из внешнего ресурса – Eldho

+0

Я думал то же самое, но на этом слишком много кода, а примеры на как сгруппировать/объединить файлы с помощью ASPNET, легко для Google. – bsoulier

+0

У нас уже есть решение с использованием webapi и многопользовательской загрузки данных для больших файлов, SignalR Client не поддерживает веб-сайты на xamarin (mono), где мы используем [websocket-sharp] (https://github.com/sta/websocket-sharp) на наших моно клиентах, есть метод в websocket-sharp для отправки файла 'ws.SendAsync (data, completed)', как я могу использовать этот метод с моим центром, это то, что мы ищем , –

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