AspNetCore / SignalR - возвращение HttpResponseMessage с сервера-концентратора SignalR приводит к InvalidDataException - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть два веб-приложения.Из одного веб-приложения я пытаюсь установить связь с другим приложением через 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?

Большое спасибо за вашу помощь.

...