Базовый асинхронный метод .Net для служб Azure - PullRequest
0 голосов
/ 05 сентября 2018

Я создал веб-приложение ASP Net Core (2.0) с подключенными службами Azure, при тестировании на локальном хосте оно работает идеально, но при публикации в IIS выдает следующую ошибку:

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

Я отправляю txt-файл из представления в контроллер и отправляю в службу Azure для анализа, это метод записи:

[HttpPost("Analyze_v2")]
    public JsonResult Analyze_v2(IFormFile archivo)
    {
        List<string> result = new List<string>();
        using (var reader = new StreamReader(archivo.OpenReadStream()))
        {
            while (reader.Peek() >= 0)
                result.Add(reader.ReadLine());
        }

        List<TextAnalyzeModel> data = new List<TextAnalyzeModel>();
        for (int i = 0; i < result.Count; i++)
        {
            TextAnalyzeModel model = new TextAnalyzeModel();
            model.TextStr = result.ElementAt(i);
            if (!string.IsNullOrWhiteSpace(model.TextStr))
            {
                ITextAnalyticsAPI client = this.GetTextAnalyzeClient(new AsyncHandler());
                model.LanguageAnalyzeResult = client.DetectLanguage(
                    new BatchInput(
                        new List<Input>()
                        {
                            new Input(i.ToString(),model.TextStr)
                        }));
                model.SentimentAnalyzeResult = client.Sentiment(
                    new MultiLanguageBatchInput(
                        new List<MultiLanguageInput>()
                        {
                            new MultiLanguageInput(
                                model.LanguageAnalyzeResult.Documents[0].DetectedLanguages[0].Iso6391Name,
                                i.ToString(),
                                model.TextStr)
                        }));
                data.Add(model);
            }
        }
        return Json(data);
    }

Это метод GetTextAnalyzeClient:

private ITextAnalyticsAPI GetTextAnalyzeClient(DelegatingHandler handler)
    {
        string key = configuration.GetSection("CognitiveServices")["TextAnalytics:ServiceKey"];
        ITextAnalyticsAPI client = new TextAnalyticsAPI(handlers: handler);
        client.SubscriptionKey = key;
        client.AzureRegion = Microsoft.Azure.CognitiveServices.Language.TextAnalytics.Models.AzureRegions.Westus;
        return client;
    }

А это класс AsyncHandler:

class AsyncHandler : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        // Call the inner handler.
        var response = await base.SendAsync(request, cancellationToken);
        return response;
    }
}

Я тестировал на разных портах и ​​с той же проблемой, на localhost работает нормально, а при публикации выдает исключение Любые идеи будут полезны.

1 Ответ

0 голосов
/ 06 сентября 2018

Войдите на сервер, на котором размещен IIS, и попробуйте выполнить telneting на номер 40.112.254.71 на 443. Если вы не получили ответ, это означает, что трафик блокируется (сетевые правила) и не зависит от вашего приложения.

Если ответ появляется, но через некоторое время, убедитесь, что время ожидания ответа установлено правильно:

<aspNetCore requestTimeout="00:20:00" processPath=“%LAUNCHER_PATH%” arguments=“%LAUNCHER_ARGS%” stdoutLogEnabled=“false” stdoutLogFile=“.\logs\stdout”     />
...