500 - внутренняя ошибка сервера при вызове веб-API ASP .Net Core 2.1 на Windows Server

У меня есть веб-API ASP .Net Core 2.1, который я развернул на новом сервере, который мы недавно приобрели (под управлением Windows Server 2016 Standard). API отлично работает как на моем компьютере разработки, так и на нашем старом сервере (под управлением Windows Server 2012 R2). Но на этом новом сервере я получаю такую ​​ошибку:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

Я помню, как год назад я изо всех сил пытался запустить его на нашем старом сервере. В конце концов я заставил его работать, но я не могу вспомнить, что делал! Есть ли способ получить дополнительную информацию об этой ошибке? Я проверил Windows Event Viewer на новом сервере, но там ничего нет. Кроме того, хотя в моем web.config указано stdoutLogEnabled = "true", журнал не создается, и я создал \ logs \ stdout, чтобы папки действительно существовали ...

У меня также есть app.UseDeveloperExceptionPage (); в моем Startup.cs, но я не получаю больше информации, чем простая внутренняя ошибка сервера 500.

Вот как выглядит мой файл web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\PropWorx.API.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: cfa62a1f-c5f6-43f8-bcbe-04068e40b803-->

У меня также установлен Microsoft .NET Core 2.1.1 - Windows Server Hosting и установлена ​​Microsoft .NET Core Runtime - 2.1.1 (как x86, так и x64). .

Как я уже сказал, он работает на моем компьютере разработки и на нашем старом сервере, так что это, должно быть, проблема конфигурации на новом сервере. Есть ли способ получить более подробную информацию об ошибке, кроме 500 Internal Server Error? Спасибо...


person Fabricio Rodriguez    schedule 11.09.2018    source источник
comment
Попробуйте вручную запустить свой api из cmd или Power Shell. Сделайте звонок и опубликуйте здесь сообщение об ошибке.   -  person Edward Chopuryan    schedule 11.09.2018
comment
Откройте командную строку на сервере и запустите dotnet.exe MyApp.dll. Посмотрите, нет ли там ошибок. В этом случае вы сможете увидеть трассировку стека в окне командной строки. Если нет, то это проблема IIS. Предполагая, что вы правильно установили пакет хостинга, убедитесь, что вы либо перезапустили впоследствии сервер, либо полностью перезапустили службу IIS (iisreset недостаточно).   -  person Chris Pratt    schedule 11.09.2018
comment
Спасибо Эдварду и Крису. Я запустил API на сервере, используя DOTNET RUN из командной строки (запускает ли он его в IIS или IIS Express ??), и я вызвал его конечные точки с помощью Postman on (также с сервера, вызвав localhost: 5001 / api / test). Кажется, что все работает нормально - я вижу, как EF Core генерирует и выполняет SQL-запросы в окне командной строки. Но Почтальону ничего не возвращается. Почтальон просто истекает ... но в командной строке все в порядке. Никаких ошибок не показывает ... так странно ..   -  person Fabricio Rodriguez    schedule 14.09.2018


Ответы (2)


Я наконец-то понял! У меня была устаревшая версия пакета .Net Core Windows Server Hosting. У меня была установлена ​​версия 2.1.1. Я удалил его, установил версию 2.1.4, и теперь она работает. Спасибо всем за ваше время и поддержку. Я очень ценю это!

person Fabricio Rodriguez    schedule 14.09.2018

Эта проблема может быть вызвана различными причинами.

если это происходит только в браузере (при работе с curl или почтальоном), это может быть ошибка предполетного запроса, тогда вам нужно будет изменить UrlScan.ini (я предполагаю, что это не изменилось в Windows 2016) следующим образом путь (C: \ Windows \ System32 \ inetsrv \ urlscan), добавьте ОПЦИИ в [AllowVerbs].

в противном случае убедитесь, что вы выполнили действия, указанные в документации Microsoft:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.1&tabs=aspnetcore2x

вам может потребоваться установить Visual C ++ 2015 Redistributable на сервере

Чтобы получить журналы, измените "IncludeScopes": true, в разделе ведения журнала appsettings.json проверьте также средство просмотра событий.

Надеюсь, вы найдете это полезным.

person KYG    schedule 11.09.2018
comment
Спасибо, KYG. Да, я установил Visual C ++ 2015. Я попытался запустить API локально на сервере, используя DOTNET RUN (не уверен, запускает ли он его в IIS или IIS Express), и протестировал его с помощью Postman на сервере. Кажется, что все работает нормально - я вижу, как EF Core генерирует и выполняет SQL-запросы, когда я вызываю действие. Но Почтальону ничего не возвращается. Почтальон просто истекает ... но в командной строке все в порядке. Ошибок не показывает ... так странно ... - person Fabricio Rodriguez; 14.09.2018
comment
Кроме того, хотя я изменил web.config, включив stdoutLogEnabled = true, и создал соответствующие папки в stdoutLogFile =. \ Logs \ stdout, и добавил IncludeScopes: true в раздел loggin appsettings.json, он ничего не регистрирует. Он даже не регистрирует ошибки в средстве просмотра событий. : / - person Fabricio Rodriguez; 14.09.2018
comment
Пожалуйста, каковы настройки LogLevel в вашем appsettings.json? какой HTTP-код теперь возвращается в почтальоне? если вы не получаете журналы, это означает, что у вас нет предупреждений или ошибок при выполнении запроса, чтобы просмотреть все журналы, которые вам нужно изменить по умолчанию на «Информация». - person KYG; 14.09.2018
comment
Я заметил одну вещь ... в IIS на сервере при переходе на мой сайт и попытке открыть любую из ссылок, таких как страницы ошибок или ведение журнала или любой из ярлыков в IIS, он выдает эту ошибку: \\? \ C: \ inetpub \ propworxapi \ web.config - person Fabricio Rodriguez; 14.09.2018
comment
Моим значением LogLevel по умолчанию в appsettings.json было предупреждение. Я изменил его на «Информация», но он по-прежнему ничего не регистрирует. Но я предполагаю, потому что ошибок нет. Я думаю, что API работает отлично. Я подозреваю, что ответ от API просто не доходит до клиента (в данном случае Postman). На почтальоне он даже не получает ответного кода состояния HTTP .... Почтальон просто, кажется, теряет время ожидания ответа. И когда я запускаю API вручную из cmd с помощью DOTNET BUILD, кажется, что все работает правильно ... Никаких ошибок. - person Fabricio Rodriguez; 14.09.2018
comment
При использовании Jexus Manager ошибка выглядит как «Неизвестный путь конфигурации» MACHINE / WEBROOT / APPHOST /. - person Fabricio Rodriguez; 14.09.2018
comment
в этом случае попробуйте изменить атрибут аргумента в теге aspNetCore в файле web.config на полный путь (C: \ inetpub \ propworxapi \ PropWorx.API.dll). - person KYG; 14.09.2018