Я хочу передать дополнительный параметр через Signalr без каких-либо критических изменений.
Используемый пакет nuget сигнализатора стороны веб-интерфейса концентратора SignalR - "Microsoft.AspNetCore.SignalR" Version = "1.0.3".Используемый клиентский пакет nuget: "Microsoft.AspNetCore.SignalR.Client" Version = "1.0.3" />
Исходный код на стороне веб-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Это сервис веб-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.
});
Пожалуйста, дайте мне знать, как я могу исправить эту проблему.Для меня главное, чтобы мой конечный пользователь работал нормально, если он обновил код на стороне клиента или нет.