SignalR Client - IHubProxy.On <>和Invoke <>接受接口

Dar*_*ght 5 c# signalr

我正在构建一个Windows服务,它将充当使用SignalR的现有站点的客户端.

在传递具体类时,我IHubProxy.On<>IHubProxy.Invoke方法都有效.

例如,这有效:

 hubProxy.On<MigrationRequest>("iSWindowsServiceRequest", request =>
     MigrateData.Invoke(request));
Run Code Online (Sandbox Code Playgroud)

MigrationRequest看起来像这样:

public class MigrationRequest : IISWindowsServiceRequest
{
    public MigrateWhat What { get; set; }
    public MigrationFor For { get; set; }
    public Guid EntityFor_Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我试试这个:

hubProxy.On<IISWindowsServiceRequest>("iSWindowsServiceRequest", request => 
Handshake.HandleRequest(request));
Run Code Online (Sandbox Code Playgroud)

我的要求永远不会被接受.

我希望实现的是创建单个pub-sub方法,而不是为该服务接受的每个具体类创建一个方法.

是否可以将接口传入On<>()方法?

同样适用于Invoke<>()- 如果我传递的对象包含任何接口的属性,则调用永远不会成功.

所以这不起作用:

public class ISWindowsServiceResponse
{
    public IISWindowsServiceRequest OriginalRequest { get; set; }
    public bool Success { get; set; }
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但这会

public class ISWindowsServiceResponse
{
    public MigrationRequest OriginalRequest { get; set; }
    public bool Success { get; set; }
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

在我工作的地方,我们花了很多时间试图找出一种让 SignalR 集线器序列化接口的方法。最后,我们最终不得不提取真实的对象(真实的类和结构,而不是接口后面)以通过网络发送。无法告诉 SignalR 如何序列化接口。