【问题标题】:How to Send File to SignalR hub From websocket-sharp Client?如何从 websocket-sharp 客户端将文件发送到 SignalR 集线器?
【发布时间】:2016-09-19 09:18:57
【问题描述】:

我们在我们的一个应用程序中使用 websocket-sharp,它与服务器上的 SignalR Hub 建立 websocket 连接,我们能够发送文本消息并接收相同的响应,但无法发布 @987654322 @。

向服务器发送文本的代码是这样的:

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() 中设置我的中心名称?

【问题讨论】:

  • 按照@bsoulier 的建议,使用signalR 发送实时消息示例您的mp3 已准备好下载,一旦您收到来自api 的消息下载mp3
  • 我很好奇。为什么要使用 websocket-sharp 而不是 SignalR 客户端?
  • 我们的客户端应用程序是使用 xamarin 开发的,并且信号器客户端不支持单平台的 websocket,这使我们使用 websocket-sharb。 @xleon
  • Xamarin 支持 SSE 作为传输协议,并且运行良好。除非您出于特定原因需要 websocket。我也很好奇您如何使用 WS 连接到信号器。我以为那是不可能的。有文档链接吗?
  • 使用 AJAX 进行双向通信的 SSE 将比使用 WebSocket 连接具有更高的往返延迟和更高的客户端->服务器带宽。我的逻辑基于此处提供的详细信息:github.com/sta/websocket-sharp@xleon

标签: c# xamarin signalr websocket-sharp


【解决方案1】:

Sending big files 并不是 SignalR 的真正用途。

SignalR 适用于服务器和客户端之间的实时消息传递,适用于相当小的消息(因为消息大小有real impact on performance)。

对于这种需要,我会研究 ASP.NET Web API,尤其是通过使用 chunked upload(将文件拆分为多个部分以避免连接中断)

【讨论】:

  • 如果您从外部资源添加更多详细信息会很棒
  • 我也是这么想的,但是那个代码太多了,关于如何使用 ASPNET 分块/合并文件的例子很容易谷歌。
  • 我们已经有了使用 webapi 和多部分数据上传大文件的解决方案,SignalR 客户端不支持 xamarin(单声道)上的 websockets,这是我们在单声道客户端上使用 websocket-sharp 的地方, websocket-sharp 中有一个发送文件的方法,ws.SendAsync (data, completed),我如何在我的集线器上使用这个方法是我们正在寻找的。​​span>
  • 此实现的任何“Hello Word”类示例?
  • 这里有一篇来自 CodeProject here 的文章,但是你可以通过四处寻找其他示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多