У меня есть два веб-приложения.Из одного веб-приложения я пытаюсь установить связь с другим приложением через SignalR.Я отправляю данные через SignalR с помощью InvokeAsync и жду результата на клиенте.На сервере с отправленными данными я вызываю веб-API, а затем хочу отправить результат в виде HttpResponseMessage клиенту SignalR, который ожидает.Но при попытке сделать это я получаю следующую ошибку:
{System.IO.InvalidDataException: Connection terminated while reading a message.
at Microsoft.AspNetCore.SignalR.Client.HubConnection.ReceiveLoop(ConnectionState connectionState)
at Microsoft.AspNetCore.SignalR.Client.HubConnection.InvokeCoreAsyncCore(String methodName, Type returnType, Object[] args, CancellationToken cancellationToken)
at Microsoft.AspNetCore.SignalR.Client.HubConnection.InvokeCoreAsync(String methodName, Type returnType, Object[] args, CancellationToken cancellationToken)
at Microsoft.AspNetCore.SignalR.Client.HubConnectionExtensions.InvokeCoreAsync[TResult](HubConnection hubConnection, String methodName, Object[] args, CancellationToken cancellationToken)
at SecretariatMedical.Services.WebService.LogInAndGetToken(LoginViewModel loginViewModel) in C:\Users\SylvainB\Desktop\aspnetcore\Projet Clinique Charles\SecretariatMedical\SecretariatMedical\Services\WebService.cs:line 82}
Вот код от клиента:
connection = new HubConnectionBuilder()
.WithUrl("https://localhost:44379/ServeurWebServiceSignalRHub")
.Build();
connection.Closed += async (error) =>
{
await Task.Delay(new Random().Next(0, 5) * 1000);
await connection.StartAsync();
};
await connection.StartAsync();
HttpResponseMessage responseSignalR = await connection.InvokeAsync<HttpResponseMessage>("LogInAndGetToken", loginViewModel );
Код на сервере-концентраторе SignalR:
public async Task<HttpResponseMessage> LogInAndGetToken(LoginViewModel loginViewModel)
{
try
{
string apiUrl = "api/authenticationapi/gettoken";
HttpResponseMessage response;
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("https://localhost:44379");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
response = await client.PostAsJsonAsync(apiUrl, loginViewModel);
//ResultLoginViewModel resultLogin = await response.Content.ReadAsAsync<ResultLoginViewModel>();
return response;
}
}
catch (Exception e)
{
HttpResponseMessage responseError = new HttpResponseMessage(HttpStatusCode.InternalServerError);
return responseError;
}
}
Код в моем StartUp.cs:
services.AddSignalR().AddJsonProtocol(options =>
{
options.PayloadSerializerSettings.ContractResolver = new DefaultContractResolver();
});
На сервере-концентраторе SignalR, когда я пытаюсь прочитать данные и отправить их обратно как объект ViewModel, клиент SignalR получает их нормально.
Кто-нибудь знает, почему существует проблема с транспортировкой HttpResponseMessage?
Большое спасибо за вашу помощь.