【发布时间】:2019-03-23 03:53:50
【问题描述】:
我想通过 Signalr 传递额外的参数而不做任何重大更改。
正在使用的 SignalR 集线器 Web api 端信号器 nuget 包是“Microsoft.AspNetCore.SignalR”版本=“1.0.3”。 正在使用的客户端 nuget 包是 "Microsoft.AspNetCore.SignalR.Client" Version="1.0.3" />
signalr hub web api 端的初始代码如下-
public async Task<bool> SendResponse(string uniqueId, string param1, string param2, string param3, string param4, string param5, string param6)
{
await HubContext.Clients.Group(uniqueId).SendAsync("SendResponse", param1, param2, param3, param4, param5,param6);
return true;
}
客户端的初始代码-
Connection.On<string, string, string, string, string, string>("SendResponse",
async (param1, param2, param3, param4, param5, param6) =>
{
//code here.
});
当每个人想要更新 nuget 包时,此客户端代码通过 nuget 包及其应用程序所有者共享给每个人。
到目前为止,一切正常,出现了一个变化的需求(通过响应传递一个新参数)。
为了满足这个要求,我在下面给出了信号集线器端的代码更改-
public async Task<bool> SendResponse(string uniqueId, string param1, string param2, string param3, string param4, string param5, string param6, string param7)
{
//send 6 parameters in old method so that client code can continue his work without updating client side code changes.
await HubContext.Clients.Group(uniqueId).SendAsync("SendResponse", param1, param2, param3, param4, param5, param6);
//Send 7 parameters in new method.
await HubContext.Clients.Group(uniqueId).SendAsync("SendResponse2", param1, param2, param3, param4, param5, param6, param7);
return true;
}
SignalR 是使用这些代码更改更新的集线器 Web api 服务,之后出现问题。 具有旧 SignalR 客户端代码的客户端应用程序开始收到错误-
Exception thrown: 'System.IO.InvalidDataException' in Microsoft.AspNetCore.SignalR.Protocols.Json.dll
Invocation provides 7 argument(s) but target expects 0.
SendResponse2 方法在客户端的更改-
Connection.On<string, string, string, string, string, string, string>("SendResponse2",
async (param1, param2, param3, param4, param5, param6, param7) =>
{
//code here.
});
请告诉我如何解决此问题。 对我来说最重要的是,我的最终用户无论是否更新了客户端代码都应该可以正常工作。
【问题讨论】:
标签: c# asp.net-core signalr asp.net-core-signalr