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; }
}
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
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