#asp.net #iis #asp.net-web-api #web-site-project
Вопрос:
Я создаю веб-сайт, который управляется через Microsoft IIS. Я хочу, чтобы весь мой сайт работал так:
- IIS получает HTTP-запрос через порт 80 для основного веб-сайта, а затем отвечает с помощью документов HTML и JS. Эти документы остаются статичными и просто сохраняются в виде файлов на сервере, которые IIS считывает и отправляет клиенту без дальнейшего изменения.
- В документе JS, который получает клиент, есть команды fetch()-команды, которые отправляют дополнительные запросы во время выполнения через другой порт, когда пользователь взаимодействует с веб-сайтом. Браузер должен получить данные JSON с сервера. Я написал ASP.NET веб-приложение для этого.
Вот как выглядит моя текущая настройка в IIS:
введите описание изображения здесь
Я создал сайт для первого шага (внешний интерфейс) и один для второго шага (внутренний интерфейс). Я добавил привязку для первого сайта к порту 80 и установил документ по умолчанию. Я связал второй сайт с каталогом, в котором находится двоичный файл сборки моего ASP.NET применение лжи. Затем я добавил привязку с портом 5000 и тем же IP-адресом на второй сайт.
Первый шаг работает. При отправке запроса через порт 80 я получаю документы веб-сайта. Но второй шаг этого не делает. В режиме отладки Visual Studio он работает нормально и выполняет свою работу. Но мне еще не удалось заставить второй шаг работать в IIS. Ответ, который я получаю при отправке своих запросов, — 404. Я создал дополнительный контроллер для своего бэкэнда для тестирования, который должен просто отвечать на некоторые жестко закодированные строки и больше ничего не делать. На самом деле это работает. Я действительно получаю 200 и строки в качестве ответа. Так что, должно быть, что-то не так с ASP.NET внутренняя связь с моей базой данных.
Я обнаружил, что каждый раз при отправке моего запроса мой сервер записывает журнал ошибок. В нем говорится::
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware1
An unhandled exception has occurred while executing the request.
System.Text.Json.JsonException: A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32.
at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected(Int32 maxDepth)
at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStackamp; state)
at System.Text.Json.JsonSerializer.WriteAsyncCore(Stream utf8Json, Object value, Type inputType, JsonSerializerOptions options, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|27_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)
Опять же, я не получаю ошибку при отладке серверной точки доступа
Кто-нибудь может помочь?
Комментарии:
1. Вы утверждаете, что создали эту сложную вещь, но не можете устранить ошибку 404?
2. Если вы хотите разместить свой интерфейс и серверную часть по одному и тому же адресу: woshub.com/…
3. Обнаружена проблема, связанная с SQL-сервером. В нем говорится: «Не удалось войти в систему для пользователя» myusername$». Причина: Не удалось найти логин, соответствующий указанному имени.» . Однако я не знаю, как это исправить. Я уже добавил имя входа в систему, указанное в ошибке.
4. В соответствии с вашим описанием ошибки: mssqltips.com/sqlservertip/1735/…
Ответ №1:
Проблема заключалась в основном в неправильной настройке разрешений SQL Server. Мне удалось решить свою проблему. Это может быть полезно людям, которые сталкиваются с аналогичными проблемами:
- Ошибка «Цикл объектов JSONException» сама по себе была не такой уж полезной. Итак, я приступил к дальнейшей отладке. Я прикрепил отладку VisualStudio к фактически запущенному процессу IIS следующим образом: https://docs.microsoft.com/en-us/visualstudio/debugger/attach-to-running-processes-with-the-visual-studio-debugger?view=vs-2019 Это было полезно для поиска причины ошибки, так как теперь я мог просматривать сообщения журнала, которые гораздо больше соответствовали фактической ошибке. Имейте в виду, что вам нужно изменить модель хостинга на «outofprocess» в web.config, чтобы подключиться к автономному .Чистый процесс. https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/out-of-process-hosting?view=aspnetcore-5.0
- В случае, если вы используете среду SQL Server Management Studio, создайте логин для «NT Authority» (Обозреватель объектов > Безопасность >> Логины >>> NT-Authority), предоставьте доступ к своей базе данных и убедитесь, что вы не выбрали роль «запретить» в сопоставлении пользователей, потому что я сделал это, и это вызвало мою ошибку.