2015-05-28 21 views
6

Birden fazla JavaScript istemcisini bağlayıp veri alışverişi yapmamı sağlayan çalışan bir SignalR uygulamasına sahibim.HttpClientException, çalışma hub'ına bağlanırken SignalR .NET İstemcisi

An exception of type 'Microsoft.AspNet.SignalR.Client.HttpClientException' occurred in mscorlib.dll but was not handled in user code 

Additional information: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 

{ 
    Transfer-Encoding: chunked 
    X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcRGFycmVuXERlc2t0b3BcQ29uc29sZUFwcGxpY2F0aW9uMVxXZWJBcHBsaWNhdGlvbjFcc2lnbmFsclxuZWdvdGlhdGU=?= 
    Cache-Control: private 
    Date: Thu, 28 May 2015 09:13:06 GMT 
    Server: Microsoft-IIS/8.0 
    X-AspNet-Version: 4.0.30319 
    X-Powered-By: ASP.NET 
    Content-Type: text/html; charset=utf-8 
} 

Bir konsoluna .NET istemci kodu bir marka yeni web uygulaması içine Hub kopyalanıp kopyalanan mümkün olduğu kadar çok değişken kaldırmak için: Ben aşağıdaki hatayı alıyorum bir .NET istemcisi ile bağlanmaya çalıştığında uygulama. Hala aynı istisnayı elde ediyorum. İşte

Dim hubConnection As HubConnection 
Dim chatHubProxy As IHubProxy 

Public Async Sub RunTest() 
    System.Net.ServicePointManager.DefaultConnectionLimit = 10 

    hubConnection = New HubConnection("http://localhost:64400") 
    hubConnection.Credentials = Net.CredentialCache.DefaultCredentials 
    hubConnection.TraceLevel = TraceLevels.All 
    hubConnection.TraceWriter = Console.Out 

    chatHubProxy = hubConnection.CreateHubProxy("Chat") 

    AddHandler hubConnection.StateChanged, Sub(stateChange) Console.WriteLine("[" & DateTime.Now & "]: " & stateChange.OldState.ToString() & " => " & stateChange.NewState.ToString() & " " & hubConnection.ConnectionId) 

    chatHubProxy.On(Of String, String)("ReceiveMessage", Sub(from, message) Console.WriteLine(message)) 
    Await hubConnection.Start() 
End Sub 

konsol çıkış edilir: Burada müvekkilim kodu

09:21:54.3952161 - null - ChangeState(Disconnected, Connecting) 
[28/05/2015 10:21:54]: Disconnected => Connecting 
[28/05/2015 10:21:56]: Connecting => Disconnected 
09:21:56.8448452 - null - Disconnected 
09:21:56.8458461 - null - Transport.Dispose() 
09:21:56.8468465 - null - Closed 

Ve işte benim göbek kodu: Bu önemsiz bir hata olduğu ortaya çıktı

public class ChatHub : Hub 
{ 
    public void SendMessage(string name, string message) 
    { 
     Clients.All.ReceiveMessage(name, message); 
    } 
} 
+0

(http [SignalR sunucu üzerinde izleme açmak] deneyin. //www.asp. net/signalr/genel/test-ve-ayıklama/etkinleştirme-signalr-tracing). Umarım SignalR hatayı kaydeder ... –

cevap

10

ama hata mesajı çok işe yaramazdı, eminim diğerleri de aynı sorunla karşı karşıya gelecek. Hub'ın adı yanlıştı. "ChatHub" kullanmam gerektiğinde "Sohbet" kullandım.

İstisna 404 veya "Hub bulunamadı" ya da benzeri bir şey olsaydı, bir kaç boşa harcanan saat yerine kolay bir düzeltme olurdu!

+4

Bu isim de doğruysa ancak 'Hub' sınıfı herkese açık değildir. –

+1

Beni CreateHubProxy'de yazım hatası neden olduğunu bulmak için günün yarısını aldı! Geç bağlamadan ve güçlü olmayan yazmadan nefret ediyorum. –

+0

Teşekkürler bu gün – Dinuka

1

Gerçek mesele ama ı o SignalR sunucusu dönen durumu 500 (Dahili Sunucu Hatası) gerçekleştirmek için önemli olduğunu düşünüyorum çözüldü (aslında değil çok bilgilendirici hatası) güvenlik özelliği olduğunu. Sunucu hatalarıyla ilgili daha fazla bilgiye ihtiyaç duyarsanız

, aşağıdaki yapabilirsiniz:

1) Enable tracing on server

ve \ veya

2) istisna mesajları istemciye göndermek detaylı etkinleştirme (yapmayın bu üretim):!

SignalR 1.x: RouteTable.Routes.MapHubs(new HubConfiguration { EnableDetailedErrors = true });

SignalR 2.x

public void Configuration(IAppBuilder app) 
{ 
     var hubConfiguration = new HubConfiguration 
     { 
#if DEBUG 
      EnableDetailedErrors = true 
#else 
      EnableDetailedErrors = false 
#endif 
     }; 

     app.MapSignalR(hubConfiguration); 
} 
3

@Michael Tiller en Darren'ın cevabı benim sorun için bir çözüm olduğu ortaya çıktı @ içinde açıklama, bu yüzden kendi cevap içine bu yapmak adil olduğunu düşünüyorum:

Hub sınıfını değiştirme public için sorunumu çözdü. Teknik olarak internal olan ...

class TestHub 
{ 
} 

olarak yaratan, varsayılan olarak, bir örnek takip ve Visual Studio'da yeni bir sınıf eklerken Hub devraldığı ve KAMU sınıf oluşturmak için adı geçen metni cevapsız (bakınız here). Benim bölümümde daha dikkatli bir okuma bunu önleyecekti, ama bir başkasının benim yaptığım gibi acelesi çok büyük olduğu için ... :)

0

Benzer bir yanlışlık yapmak için birkaç saat sürdüm.

[HubName("Hostsync")] // Missed to add this attribute in Hub of SignalR Self Host 
public class ChatHub : Hub 
{ 

} 

Ancak, İstemci'de proxy adını tanımlayarak bağlanmaya çalışıyordum.

Böyle bir hata olmadığından emin olun. Bağlantı kurumu sırasında kesin bir istisna elde etmeyeceğiniz için.

aşağıdaki linki

bana birkaç şey

bu yardımcı olur

Stackoverflow Question Answer Link

Umut ele alınmasını sağlamışlardır,

İlgili konular