.NET Core Console Application внутри контейнера Docker - System.Net.Http.CurlHandler.ThrowIfCURLEError (ошибка CURLcode) - PullRequest
0 голосов
/ 01 февраля 2019

У меня возникла проблема с консольным приложением .Net (ConsoleApp1), которое выполняется в контейнере Docker.У меня есть несколько контейнеров DotNetcore для ConsoleApp1.В каждый контейнер я передаю переменные среды вместе с одним уникальным URL.

Я решил написать тестовый пример, чтобы проверить, почему некоторые URL не работают

Проблема, с которой я сталкиваюсь, заключается в том, что некоторые контейнеры могут вызывать клиента, но другие контейнеры жалуютсяс ошибкой:

ex = {System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: Couldn't connect to server
   at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)
   at System.Net.Http.CurlHandler.MultiAge

Вот код, который я использую:

public static async Task TestIfGivenURLPassORFail()
{
string _baseUrl = "https://abc.domain.dns.com";
//string _baseUrl = "https://def.domain.dns.com";
//string _baseUrl = "https://xyz.domain.dns.com";
string _username = "username";
string _password = "password";
string _extendedPath = "/xml/hoststatus?hostname=domain.mail.onmicrosoft.com";
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(_username, _password);
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
//using (handler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true })
using (HttpClient client = new HttpClient(handler))
{
try
{
client.BaseAddress = new Uri(_baseUrl);
//client.DefaultRequestHeaders.Accept.Clear();
MediaTypeWithQualityHeaderValue contentType = new MediaTypeWithQualityHeaderValue("application/xml");
client.DefaultRequestHeaders.Accept.Add(contentType);
//Convert to XML
XmlDocument xmlDoc = new XmlDocument();
HttpResponseMessage response = await client.GetAsync(_extendedPath);
string stringData = await response.Content.ReadAsStringAsync();
xmlDoc.LoadXml(stringData);
if (stringData != null)
{
    Assert.True(true, "Test pass");
}
else
{
    Assert.True(false, "Test Fail");
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred while sending the request.  Response failed for {ex.StackTrace}.");
}
}
...