Соединение закрывается при доступе к минимальному веб-APIC#

Место общения программистов C#
Ответить
Anonymous
 Соединение закрывается при доступе к минимальному веб-API

Сообщение Anonymous »

У меня есть приложение WPF, в котором размещен минимальный веб-API. Для запуска минимального веб-API используется следующий код:

Код: Выделить всё

public async Task StartWebApi(IEnumerable urls, CancellationToken token)
{
var builder = WebApplication.CreateBuilder();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI();

app.MapGet("/some/route", _someService.DoSomething);
app.MapPost("/some/other/route", _someService.DoSomethingElse);

foreach (var url in urls)
{
app.Urls.Add(url);
}

await app.StartAsync(token);
}
На другом компьютере запущено другое приложение, которое обращается к минимальному веб-API. Это старое приложение, работающее на .NET Framework и не имеющее async/await. По этой причине для доступа к минимальному веб-API используются следующие методы:

Код: Выделить всё

private string MakeHttpGetRequest(string url, int retries = 5)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "GET";

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
string text = reader.ReadToEnd();
return text;
}
}
}
}
catch (WebException ex)
{
if (retries > 0)
{
_logger.Debug("Exception at HTTP Get Request: " + ex.ToString());
retries--;
Thread.Sleep(1000);
return MakeHttpGetRequest(url, retries);
}
else
{
throw;
}
}
}

private string MakeHttpPostRequest(string url, string jsonData, int retries = 5)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";

if (!string.IsNullOrWhiteSpace(jsonData))
{
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(jsonData);
}
}

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
return reader.ReadToEnd();
}
}
}
}
catch (WebException ex)
{
if (retries > 0)
{
_logger.Debug("Exception at HTTP Post Request: " + ex.ToString());
retries--;
Thread.Sleep(1000);
return MakeHttpPostRequest(url, jsonData, retries);
}
else
{
throw;
}
}
}
Время от времени я получаю исключение о том, что удаленный хост закрыл соединение. Вот почему бывают повторы. Но повторные попытки устраняют только эффект, а не основную причину. В чем может быть причина исключений?

Подробнее здесь: https://stackoverflow.com/questions/797 ... al-web-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»