2015-07-08 6 views
5

Sto costruendo un servizio Windows che fungerà da client per un sito esistente che utilizza SignalR.Client SignalR - IHubProxy.On <> e Invoca <> accetta un'interfaccia

Ho metodi IHubProxy.On<> e IHubProxy.Invoke che funzionano quando si passa intorno a classi concrete.

Per esempio, questo funziona:

hubProxy.On<MigrationRequest>("iSWindowsServiceRequest", request => 
    MigrateData.Invoke(request)); 

E il MigrationRequest assomiglia a questo:

public class MigrationRequest : IISWindowsServiceRequest 
{ 
    public MigrateWhat What { get; set; } 
    public MigrationFor For { get; set; } 
    public Guid EntityFor_Id { get; set; } 
} 

Ora, se provo questo:

hubProxy.On<IISWindowsServiceRequest>("iSWindowsServiceRequest", request => 
Handshake.HandleRequest(request)); 

La mia richiesta è mai preso su.

quello che speravo di ottenere era la creazione di singoli metodi pub-sub, piuttosto che uno per ogni classe concreta che questo servizio avrebbe accettato.

È possibile passare un'interfaccia nei metodi On<>()?

Lo stesso vale per lo Invoke<>() - se l'oggetto che sto passando contiene proprietà di un'interfaccia, la chiamata non lo fa mai.

quindi questo non funziona:

public class ISWindowsServiceResponse 
{ 
    public IISWindowsServiceRequest OriginalRequest { get; set; } 
    public bool Success { get; set; } 
    public string Message { get; set; } 
} 

ma questo sarà

public class ISWindowsServiceResponse 
{ 
    public MigrationRequest OriginalRequest { get; set; } 
    public bool Success { get; set; } 
    public string Message { get; set; } 
} 
+0

Se si desidera solo che pub-sub possa provare a utilizzare PersistentConnection anziché Hub, è più semplice, ma potrebbe essere necessario gestire manualmente la serializzazione/deserializzazione. Questo è se è possibile modificare la parte SignalR. – fbiagi

+0

In che modo SignalR deserializza il carico utile json su un'interfaccia? Ci deve essere una classe reale che implementa un'interfaccia e SignalR non sa cosa sia in modo che possa istanziare. Nota che l'interfaccia può avere più implementazioni. – Pawel

risposta

1

Dove lavoro, abbiamo speso un sacco di tempo cercando di capire un modo per ottenere hub SignalR per serializzare interfacce . Alla fine, abbiamo finito per dover estrarre oggetti reali (classi e strutture reali, non dietro un'interfaccia) per inviare il filo. Non c'è modo di dire a SignalR come serializzare un'interfaccia.

+0

(Avrei fatto un commento, ma non ho abbastanza fama per averne uno. Scusa!) –

Problemi correlati