我有一个 SignalR 集线器 (
public class DatabaseHub : Hub
) 和一个实现接口 IDatabaseObject (public class User : IDatabaseObject
) 的 User 类。
我想向
DatabaseHub
添加一个方法,该方法接受任何实现 IDatabaseObject
的类型作为参数。
我已经尝试过:
DatabaseHub.cs
public Task DoSomething (User user) { ... }
SomeFileOnClient.cs
User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething", user)
运行完美。
但是,当我将集线器方法更改为:
DatabaseHub.cs
public Task DoSomething (IDatabaseObject user) { ... }
SomeFileOnClient.cs
User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething", user)
它不运行。
我尝试更改服务器服务,但找不到正确的组合。
感谢您的帮助。
我认为你遇到了反序列化和序列化问题。
你可以尝试使用如下所示的泛型吗:
public Task DoSomething<T>(T user) where T : IDatabaseObject
{
// Your logic here
}
并从客户端调用此方法,如下所示:
User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething<User>", user);