ASP.NET Core 2.1 HttpClient запрашивает Google не работает на сервере - PullRequest
0 голосов
/ 17 сентября 2018

Я очень плохо знаком с веб-программированием, 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

Так что мне кажется, что сервер не может разрешить имя.

У кого-нибудь есть идея?

...