2016-09-19 577 views
1

我們在我們的應用程序中使用websocket-sharp,它在服務器上與我們的SignalR Hub建立websocket連接,我們能夠發送文本消息並接收響應,但無法發佈byte[]如何發送文件到SignalR hub從websocket尖銳的客戶端?

代碼發送短信到服務器是這樣的:

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已準備好下載,一旦您收到消息從api下載mp3 * – Eldho

+0

我很好奇。爲什麼你會使用websocket-sharp而不是SignalR客戶端? – xleon

+0

我們的客戶端應用程序使用xamarin開發,信號客戶端不支持websocket或單聲道平臺,這使我們使用websocket-sharb。 @xleon –

回答

5

Sending big files是不是真的是什麼SignalR的意思。

SignalR有利於實時消息服務器之間目的&客戶,一個相當小尺寸的消息(如messahe大小有real impact on performance)。

對於這樣一個需要我會去了解一下的ASP.NET Web API,尤其是通過使用chunked upload(分割文件多件,以避免連接中斷)

+0

如果你從外部資源添加更多細節 – Eldho

+0

我會認爲相同,但是那個代碼太多了, Google如何使用ASPNET對文件進行塊/合併很容易。 – bsoulier

+0

我們已經有了一個使用webapi和多部分數據上傳的大文件的解決方案,SignalR Client不支持我們使用[websocket-sharp](https://github.com/sta)的xamarin(單聲道)上的websocket。/websocket-sharp),在websocket-sharp中有一個用於發送文件的方法,'ws.SendAsync(data,completed)',我如何使用這個方法與我的集線器是我們正在尋找的。 –