Comment envoyer des données big data via SignalR dans .NET client

Nous avons une .NET client, qui utilisent SignalR de du Serveur d'appel de méthode, mais le paramètre semble très grand, pour qu'un tel scénario comment résoudre ce problème?

Code Client:

public async Task FooAsync()
{
    var hubConnection = new HubConnection(...);
    await hubConnection.Start();

    var hubProxy = hubConnection.CreateHubProcx("ValueHub");
    //the content is very long, about 11776065 bytes (11MB)
    var content = File.ReadAllText(...);
    hubProxy.Invoke("Send", content);
    ...
}

Code serveur:

[HubName("ValueHub")]
public class ValueHub : Hub
{
    public void Send(string json)
    {

    }
}

À partir de la pile d'exception et le code source, j'ai trouvé le SignalR utiliser à l'interne HttpClient avec le FormUrlEncodedContent type HttpContent, et peut-être que la limitation est venu à partir d'ici.

System.UriFormatException was unhandled
HResult=-2146233033
Message=Invalid URI: The Uri string is too long.
Source=System
StackTrace:
at System.UriHelper.EscapeString(String input, Int32 start, Int32 end, Char[] dest, Int32& destPos, Boolean isUriString, Char force1, Char force2, Char rsvd)
at System.Uri.EscapeDataString(String stringToEscape)
at System.Net.Http.FormUrlEncodedContent.Encode(String data)
at System.Net.Http.FormUrlEncodedContent.GetContentByteArray(IEnumerable`1 nameValueCollection)
at System.Net.Http.FormUrlEncodedContent..ctor(IEnumerable`1 nameValueCollection)
at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.Post(String url, Action`1 prepareRequest, IDictionary`2 postData, Boolean isLongRunning)
at Microsoft.AspNet.SignalR.Client.Transports.HttpBasedTransport.Send(IConnection connection, String data, String connectionData)
at Microsoft.AspNet.SignalR.Client.Transports.AutoTransport.Send(IConnection connection, String data, String connectionData)
at Microsoft.AspNet.SignalR.Client.Connection.Send(String data)
at Microsoft.AspNet.SignalR.Client.Hubs.HubProxy.Invoke[T](String method, Object[] args)
at Microsoft.AspNet.SignalR.Client.Hubs.HubProxy.Invoke(String method, Object[] args)

Toutes les bonnes suggestions sur ce problème?

  • Honnêtement, je ne voudrais pas le faire dans un hub. Utiliser le hub de messagerie cadre d'informer le client que de nouvelles données arrivent. Ensuite, le client peut récupérer les données via l'api web / webmethod ou tout autre transport de la technique.
  • Cela peut vous aider stackoverflow.com/questions/7043566/...
  • Qu'est-ce que le cas d'utilisation?
  • stackoverflow.com/questions/13426014/...
InformationsquelleAutor Jerry Bian | 2014-06-17