SignalR 集线器不响应对象参数

SignalR hub not answering to object parameter

我找不到任何资源,也就是说我做不到。

我已完成所有设置 hub/client 并在参数为十进制时进行了测试,但是一旦我使用通用 class,服务器将不会做出反应。

SignalRMessage:

public class SignalRMessage<T>
{
    public SignalRMessage(T value, string text)
    {
        Value = value;
        Text = text ?? string.Empty;
    }
    public T Value { get; set; }
    public string Text { get; set; }
}

集线器(OnConnected 成功):

 public class JobHeaderHub : Hub
{
    public override Task OnConnectedAsync()
    {
        Debug.WriteLine(Clients.Caller);
        return base.OnConnectedAsync();
    }

    public async Task JobHeaderUpdated(SignalRMessage<decimal> message)
    {
        await Clients.Others.SendAsync("ReceiveJobHeaderUpdated", message);
    }

    public async Task JobHeaderCreated(SignalRMessage<decimal> message)
    {
        await Clients.Others.SendAsync("ReceiveJobHeaderCreated", message);
    }
}

客户:

 public class JobHeaderSingalRClient
{
    private HubConnection connection;

    public JobHeaderSingalRClient()
    {
        //  connection = new HubConnectionBuilder().WithUrl(@"").WithAutomaticReconnect().Build();
        connection = new HubConnectionBuilder().WithUrl(@"http://localhost:5000/jobheader").WithAutomaticReconnect().Build();

        connection.On<SignalRMessage<decimal>>("ReceiveJobHeaderUpdated", message => JobHeaderUpdated?.Invoke(message));
        connection.On<SignalRMessage<decimal>>("ReceiveJobHeaderCreated", message => JobHeaderCreated?.Invoke(message));
    }

    public static async Task<JobHeaderSingalRClient> CreateConnectedClient()
    {
        var client = new JobHeaderSingalRClient();
        await client.ConnectAsync();
        return client;
    }

    public async Task<JobHeaderSingalRClient> ConnectAsync()
    {
        await connection.StartAsync();

        return this;
    }

    public event Action<SignalRMessage<decimal>> JobHeaderUpdated;

    public async Task SendJobHeaderUpdated(decimal id, string message = null)
    {
        await connection.SendAsync("JobHeaderUpdated", new SignalRMessage<decimal>(id, message));
    }

    public event Action<SignalRMessage<decimal>> JobHeaderCreated;

    public async Task SendJobHeaderCreated(decimal id, string message = null)
    {
        await connection.SendAsync("JobHeaderCreated", new SignalRMessage<decimal>(id, message));
    }
}

我不知道为什么当参数是 SignalRMessage<decimal> 时服务器上的方法没有被命中。有谁知道?谢谢

我在使用带参数的构造函数时也遇到过此类问题。添加默认无参数构造函数后,所有这些都消失了。

这很可能与 signalR 无关,而是与底层 JSON 序列化有关。 必须指定类型才能序列化对象。

我在使用 object 类型的对象作为参数时遇到了类似的问题。

要排除故障,请打开 signalR 中的 verbose error messages 并查看是否记录了任何错误。

services.AddSignalR(options => 
    {
        options.Hubs.EnableDetailedErrors = true;
    });