Laden...

SignalR 3 - C# Client bringt 'Internal Server Error' während Javascript-Client funktioniert

Erstellt von Rioma vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.952 Views
R
Rioma Themenstarter:in
228 Beiträge seit 2013
vor 7 Jahren
SignalR 3 - C# Client bringt 'Internal Server Error' während Javascript-Client funktioniert

Hallo zusammen,

ich habe seit einigen Tagen ein Problem bezüglich SignalR in Version 3. Ich weiß Version 3 ist noch relativ weit weg von einem offiziellem Release, aber vielleicht hat ja jemand schon ein par Erfahrungen gesammelt.

Der Server liegt in Version 3.0.0-rc1-final vor. Der JavaScript Client funktioniert ohne Probleme.
Der C# Client allerdings nur bedingt. Es funktioniert die Anmeldung und der Server kann Methoden beim Client aufrufen, allerdings nicht umgekehrt.

Ich habe eine minimales Beispiel zusammengestellt:


 private static HubConnection _connection;
        private static IHubProxy _serviceGuard;

        static void Main(string[] args)
        {
            _connection = new HubConnection("http://localhost:5000/signalr");
            _serviceGuard = _connection.CreateHubProxy("Test");
            _serviceGuard.Subscribe("Test").Received += Program_Received;
            _connection.Start().ContinueWith((task) =>
            {
                _serviceGuard.Invoke("Test").Wait(); //Hier die Exception
            });

            Console.ReadKey();
        }


 [HubName("Test")]
    public class TestHub : Hub
    {
        public void Test()
        {
            Trace.WriteLine("Test aufgerufen");
        }

        public override Task OnConnected()
        {
            Trace.WriteLine("Login");
            Clients.Caller.Test();
            return base.OnConnected();
        }
    }

Ich bekomme folgende Exception:

Fehlermeldung:
{"StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:\r\n{\r\n Date: Tue, 10 May 2016 19:50:36 GMT\r\n Server: Kestrel\r\n Content-Length: 0\r\n}"}

Serverseitig wurden die "DetailedErrors" aktiviert:


services.AddSignalR(options =>
            {
                options.Hubs.EnableDetailedErrors = true;
            });

Mit dem Error ist leider nichts anzufangen. Hat zufällig jemand bereits den C# Client ans laufen bekommen?

849 Beiträge seit 2006
vor 7 Jahren

Hallo,

ich würde einmal den Fiddler dazwischen schalten, und schauen ob es einen Unterschied im Request zwischen dem Javascript client und dem .net client gibt.

Als zweites würde ich den Server im Debug starten und das Anhalten an allen Exceptions einschalten. So kommst Du vielleicht an die eigentliche Exception.

16.834 Beiträge seit 2008
vor 7 Jahren

Wenn Du den 2.2.0 Client verwendest; der ist nicht Kompatibel mit SignalR 3.0

R
Rioma Themenstarter:in
228 Beiträge seit 2013
vor 7 Jahren

Javascript verwendet Protocol-Version 1.5 und C# 1.4. Aber soweit ich gelesen hatte, war die Änderung nur für Browser relevant.

Hallo Abt. Danke für den Hinweis. Darf ich fragen wo du das gelesen hast? Ich habe leider nichts gefunden diesbezüglich. Gibt es eine alternative zum SignalR Client 2.2.X ? Auch hier finde ich nur die Version 3 vom Server.

16.834 Beiträge seit 2008
vor 7 Jahren

Ich meine, dass es dazu ein Ticket in GitHub gibt und das auch beim Community Standup angesprochen wurde.

Du weißt es ja; SignalR 3 ist noch in einem sehr frühen Stadium.
Dementsprechend wirst Du da auch nicht sooo viel finden. Und nen C# Client für SignalR ist ja jetzt kein Prio 1 Thema.
Fokus von SignalR ist ja ganz klar das Web im Sinne von JavaScript.

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo Rioma,

ich hab auch mal eine Demo gemacht mit SignalR3 und AngularJs2. SignalR3 lief zwar, aber der IE war erschreckend langsam, etwas buggy hier und da. Ist aber schon nen Monat her. Ich hab mich ein wenig umgehört und das Resultat war, dass SignalR 3 einfach noch in einem sehr sehr frühen Stadium ist (wie Abt sagt). Es wundert mich nicht, dass ein C#-Client nicht einwandfrei läuft. Wenngleich eine "harte" Exception komisch ist. Ich würde, wie schon gesagt wurde, mal die Calls mit dem Fiddler anschauen. Ich weiss, dass das jetzt keine Lösung auf dein Problem ist. Aber vielleicht eine Erklärung. 😃

Gruss

Coffeebean

16.834 Beiträge seit 2008
vor 7 Jahren

Die Exception ist die Standard Exception von Kestrel / der Pipeline.

R
Rioma Themenstarter:in
228 Beiträge seit 2013
vor 7 Jahren

Das letzte was ich gestern getestet hatte war mal die Protokolle durchzugehen. Ich kann mich daran erinnern, dass er zum Beispiel beim Longpolliing hier auf die Nase gefallen ist:

https://github.com/SignalR/SignalR/blob/dev/src/Microsoft.AspNet.SignalR.Client45/Http/DefaultHttpClient.cs Zeile 142.



return httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead, cts.Token)                
                .Then(responseMessage =>
                {
                    if (responseMessage.IsSuccessStatusCode)
                    {
                        responseDisposer.Set(responseMessage);
                    }
                    else
                    {
                      throw new HttpClientException(responseMessage); //Exception
                    }

                    return (IResponse)new HttpResponseMessageWrapper(responseMessage);
                });


Die Url c# <--> javascript sah vollkommen anders aus. Ich nehme mal an aufgrund der Protokoll-Version 1.4 -> 1.5.
Ich gehe jetzt mal nicht davon aus, dass die URL "kaputt" war.

Die eigentliche "Exception" wird dann wahrscheinlich beim Server fliegen

16.834 Beiträge seit 2008
vor 7 Jahren

Es ist eine Preview, bzw streng genommen noch davor. Du darfst weder erwarten, dass aktuell alles funktioniert oder es aktuell eine Abwärtskompatibilität gibt - noch darfst Du erwarten, dass der Code so bleibt.
Wenn Du rumspielen willst, dann verwende SignalR 3.0; vom Client wirst da aber noch Abstand nehmen müssen oder selbst einen schreiben.

Solls Zeitnah (~vor Q4) produktiv gehen, dann würde ich Dir deutlich von SignalR 3 aktuell abraten.
Dafür ist die aktuelle Version absolut nicht gedacht.

R
Rioma Themenstarter:in
228 Beiträge seit 2013
vor 7 Jahren

Danke. Es hätte ja auch sein können, dass es an mir liegt.

Dann wieder zurück zu SignalR 2.X