2014-10-24 23 views
7

2.1.2 sürümünde SignalR kullanıyorum. Kullanmam için iki kamu hub sınıfı olduğunu, Hub ve Hub<T> olduğunu fark ettim. Birincisi, eski tarihli gibi görünen bir MSDN sayfasına sahiptir ve ikincisi herhangi bir MSDN sayfası içermez. MSDN belgelerinin, Nuget'ten (ki benim kullandığım) SignalR'nin en son sürümü ile güncel olmadığını düşünüyorum, çünkü kaynaklar, her iki sınıfın da HubBase taban sınıfından miras kaldığını gösteriyor. MSDN sayfanın Kalıtım hiyerarşisi bölüm Object devralan ve IHub ve IDisposable arayüzleri Ancak bozulamaz kaynaklar sırayla IDisposable uygulayan IHub arabirimini uygulayan, yukarıda belirtilen HubBase temel sınıf açığa uygulama olarak Hub sınıfını gösterir.SignalR içinde genel hub nasıl kullanılır?

sınıfları genel olmayan ve genel varyant arasında farklılık genel varyant döner IHubCallerConnectionContext<T> yazılmış ise genel olmayan bir kişinin Clients özelliği IHubCallerConnectionContext<dynamic> döndürmesidir.

İstemcilerimin yazılmasını istiyorum, böylece istemci yöntemlerini merkezden aradığımda, uygun Intellisense desteği ve güçlü yazılan argümanlara sahip olurdum. Bununla birlikte uğraştığım şey, Hub'ın istemci modelimin yönteminin aslında tarayıcıda çağrıldığını bilmesini sağlamaktır.

Bu benim TestModel sınıftır: olmayan jenerik Merkezi sayesinde

public sealed class TestModel 
{ 
    public String Name { get; set; } 
    public void Notify() {} 
    public void NotifyComplex(TestModel model) {} 
} 

, sadece ly this.Context.Clients.Client(…) veya this.Context.Caller bağlı dynamic üzerinde .Notify() veya .Notify(new TestModel() { Name = "sth" }) arayacağımı ancak genel sınıf ile, ben aranacak Bu boş yöntemler benzer şekilde, tarayıcı hiç bildirilmez.

Genel hub sınıfını, kullanılma şekliyle nasıl kullanırsınız?

+0

: http://stackoverflow.com/a/21763587/526704 – DLeh

+0

Ben soru ilgisi yoktur korkuyorum İşte bu test kodu parçasıdır bu. İstemci yöntemlerini sunucudan aramakla ilgileniyorum, başka bir şekilde değil, bu sorunun OP'in ne yaptığı ve RPC'yi kullanarak aramak istediğim yöntemler genel değil, hub olsa da, istemciler. Yine de yorumu takdir ediyorum. –

+0

Yardımcı olup olmadığından emin değildim, ama bulduğum şeyi sağlayabileceğimi düşündüm. üzgünüm başka yararlı bilgilerim yok :( – DLeh

cevap

8

Cevabı buldum. MSDN belgelerine değil yukarı güncel olarak henüz, ama ASP .NET sitesi güzel SignalR eğitici imkan sunuyor ve bunlardan biri yazmış merkezleri kapsar: makale gösterir örnek olarak

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#stronglytypedhubs

, type argümanı için bir arabirim kullanırsanız, her şey çalışır ve yöntemleri doğru şekilde RPC s'ye çevrilmiş güçlü yazılan hub istemcileri alırsınız. Bu yararlı olabilir

public sealed class TestHub 
    : Hub<ITestClient> 
{ 
    public override Task OnConnected() 
    { 
    this.Clients.Caller.SayHello("Hello from OnConnected!"); 
    return base.OnConnected(); 
    } 

    public void Hi() 
    { 
    // Say hello back to the client when client greets the server. 
    this.Clients.Caller.SayHello("Well, hello there!"); 
    } 
} 

public interface ITestClient 
{ 
    void SayHello(String greeting); 
} 
+1

'OnConnected' yönteminin çağrılabilmesi için kayıt olmanız gerektiğini unutmayın. istemci yöntemi ilk: '$ .connection.testHub.client.sayHello = function (g) {…}'. Tasarım gereği, aranamayan istemci '' [Bağlantılı | Bağlantılı | Bağlantısı Kesildi | '' On '' metodlarını tetiklemez ve sadece talep edilen cevap paradigmasına benzer şekilde göbek yöntemlerini çağırır. –

İlgili konular