我正在构建一个Windows服务,它将充当使用SignalR的现有站点的客户端。
我在传递具体类时使用IHubProxy.On<>
和IHubProxy.Invoke
方法。
例如,这有效:
hubProxy.On<MigrationRequest>("iSWindowsServiceRequest", request =>
MigrateData.Invoke(request));
MigrationRequest看起来像这样:
public class MigrationRequest : IISWindowsServiceRequest
{
public MigrateWhat What { get; set; }
public MigrationFor For { get; set; }
public Guid EntityFor_Id { get; set; }
}
现在,如果我试试这个:
hubProxy.On<IISWindowsServiceRequest>("iSWindowsServiceRequest", request =>
Handshake.HandleRequest(request));
我的请求永远不会被提起。
我希望实现的是创建单个pub-sub方法,而不是为该服务接受的每个具体类创建一个方法。
是否可以将接口传入On<>()
方法?
同样适用于Invoke<>()
- 如果我传递的对象包含任何属于接口的属性,则调用永远不会成功。
所以这不起作用:
public class ISWindowsServiceResponse
{
public IISWindowsServiceRequest OriginalRequest { get; set; }
public bool Success { get; set; }
public string Message { get; set; }
}
但这将
public class ISWindowsServiceResponse
{
public MigrationRequest OriginalRequest { get; set; }
public bool Success { get; set; }
public string Message { get; set; }
}
答案 0 :(得分:1)
在我工作的地方,我们花了很多时间试图找到一种方法来让SignalR集线器串行化接口。最后,我们不得不提取真实的对象(真正的类和结构,而不是在接口后面)以通过网络发送。没有办法告诉SignalR如何序列化接口。