Я очень плохо знаком с веб-программированием, ASP.NET Core и C #, поэтому, возможно, на мой вопрос легко ответить, но я не могу найти решение для моей проблемы: - (
У меня есть работающее приложение ASP.NET Core 2.1, и теперь я пытаюсь связаться с внешним REST-клиентом, чтобы получить ответ JSON. На моем тестовом компьютере это работает нормально, но как только я опубликовал его на своем сервере Windwos 2012 R2 с IIS 8.5 в качестве обратного прокси-сервера, он больше не работает.
Теперь я создал TestController, чтобы проверить, что происходит:
public class TestController : Controller
{
private readonly IHttpClientFactory _httpClientFactory;
public TestController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
[HttpGet]
public async Task<ActionResult> Index()
{
var client = _httpClientFactory.CreateClient();
try
{
HttpResponseMessage response = await client.GetAsync("https://www.google.at");
return Content(response.ToString());
}
catch (Exception e)
{
return Content($"{e.Message} -- {e.InnerException} -- {e.StackTrace}");
throw;
}
}
}
Этот код отлично работает на тестовой машине.
Запустив этот код на IIS, я получаю следующий ответ:
Запрошенное имя является допустимым, но данные запрошенного типа не найдены - System.Net.Sockets.SocketException (11004): запрошенное имя является допустимым, но данные запрошенного типа не найдены
в System.Net.Http.ConnectHelper.ConnectAsync (строковый хост, порт Int32, CancellationToken cancellationToken) - в System.Net.Http.ConnectHelper.ConnectAsync (строковый хост, порт Int32, CancellationToken cancellationToken)
в System.Threading.Tasks.ValueTask 1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask
1.get_Result ()
в System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (ValueTask 1 creationTask)
at System.Threading.Tasks.ValueTask
1.get_Result ()
в System.Net.Http.HttpConnectionPool.SendWithRetryAsync (запрос HttpRequestMessage, логическое значение doRequestAuth, CancellationToken cancellationToken)
в System.Net.Http.RedirectHandler.SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken)
в Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken)
в Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync (запрос HttpRequestMessage, CancellationToken cancellationToken)
в System.Net.Http.HttpClient.FinishSendAsyncBuffered (Task`1 sendTask, запрос HttpRequestMessage, CancellationTokenSource cts, логические disposeCts)
в DocudatWebApp.Controllers.TestController.Index () в C: \ Users \ 105026676 \ Documents \ Visual Studio 2017 \ Projects \ DocudatWebApp \ DocudatWebApp \ Controllers \ TestController.cs: строка 29
Сервер работает за прокси-сервером для доступа к внешним сайтам. Поэтому я попытался установить прокси в web.config, который также не работал:
<configuration>
<system.net>
<defaultProxy enabled ="true" useDefaultCredentials="true">
<proxy scriptLocation="http://myapps.setpac.ge.com/pac.pac" bypassonlocal="true" />
</defaultProxy>
</system.net>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" arguments="%LAUNCHER_ARGS%" />
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=11" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Теперь я где-то видел, что это может быть проблема с DNS.
Я попытался выяснить это с помощью nslookup на сервере. Не уверен, что использую это право, но это результат:
Снимок экрана cmd.exe
Так что мне кажется, что сервер не может разрешить имя.
У кого-нибудь есть идея?