ASP.net Core WebAPI не запускается за IIS

Я пытаюсь разместить ASP.net Core WebAPI, как мне говорят документы Microsoft: Хостинг в ASP.NET Core

Конфигурация

Я запускаю IIS 10 на Windows Server 2016, где установлены Web Deploy 3.6, .Net Core Runtime 2.0.7 и .NET Core Server Hosting Bundle.

Веб-API настроен следующим образом:

Program.cs:

public static IWebHost BuildWebHost(string[] args) {
    IConfigurationRoot config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();

    return WebHost.CreateDefaultBuilder(args)
              .UseConfiguration(config)
              .UseStartup<Startup>()
              .UseKestrel(opt => {
                  opt.Listen(IPAddress.Loopback, 4000);
              })
              .UseIISIntegration()
              .Build();
}

web.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
    <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Agent.DuZu.Web.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>

On the IIS, the ASP.net Core Module is activated and i have a Site with a binding on port 80.

Проблема

Я публикую приложение на сервере с помощью WebDeploy, но оно просто не запускается. Нет ни вывода, ни ошибки. Я не уверен, что мне что-то не хватает или моя конфигурация просто не работает. Также я хотел бы знать, есть ли способ увидеть работающее приложение.


person Berger    schedule 25.04.2018    source источник
comment
Вы проверили, что все файлы передаются через WebDeploy. То же самое происходит, если вы загружаете файлы по FTP?   -  person TidyDev    schedule 25.04.2018
comment
Все файлы деплоятся на сервере. Я также пробовал использовать FTP, такое же поведение.   -  person Berger    schedule 25.04.2018
comment
В чем именно заключается сообщение об ошибке?   -  person Tanveer Badar    schedule 25.04.2018
comment
@TanveerBadar вот в чем проблема, сообщения об ошибке нет. Он просто помещает туда файлы, и ничего не происходит.   -  person Berger    schedule 25.04.2018
comment
Вы пытались установить SDK, чтобы убедиться, что он не связан с отсутствующими зависимостями? Без ошибки сложно понять, что происходит. Ваш web.config точно такой же, как у меня, так что ..   -  person jpgrassi    schedule 25.04.2018
comment
кроме того, вы можете запустить приложение из папки, в которой вы развернули? перейдите в папку, в которой Debdeploy публикует ее, и запустите dotnet Agent.DuZu.Web.dll. Если это работает, вы можете исключить файлы и проблемы с пакетами.   -  person jpgrassi    schedule 25.04.2018
comment
@jpgrassi Запуск вручную с помощью dotnet или просто .exe работает нормально.   -  person Berger    schedule 25.04.2018
comment
Как выглядит пул приложений? Что вы для него настроили?   -  person jpgrassi    schedule 25.04.2018
comment
Вы проверили программу просмотра событий Windows? В нем часто регистрируются проблемы с IIS.   -  person Daboul    schedule 25.04.2018
comment
@jpgrassi настроен без управляемого кода и интегрирован для режима конвейера. И, конечно, это началось   -  person Berger    schedule 25.04.2018
comment
@Daboul Я получаю только предупреждения, учитывая: The Application Host Helper Service encountered an error trying to delete the history directory 'C:\inetpub\history\CFGHISTORY_0000000054'. The directory will be skipped and ignored. Note that the directory may still get deleted in the future if the service restarts. The data field contains the error number.   -  person Berger    schedule 25.04.2018
comment
но приложение просто не запускается, что заставляет вас так говорить? когда вы отправляете запрос в свое веб-приложение, вы не получаете процесс dotnet.exe в памяти? есть ли запрос, который вы можете использовать, который работает, когда вы запускаете его вручную с помощью dotnet, и который не работает при отправке в IIS? вы не получаете никаких сообщений от IIS в ваш браузер?   -  person Daboul    schedule 25.04.2018
comment
Если приложение запускается из консоли, но не из IIS, единственное, что имеет смысл, - это то, что вам не хватает среды выполнения хостинга и / или вы еще не перезапустили свой сервер.   -  person Chris Pratt    schedule 25.04.2018
comment
@ChrisPratt Я бы согласился, но это должно вести четкий журнал в средстве просмотра событий. На совершенно новой виртуальной машине, ранее сегодня, я столкнулся с той же проблемой и ясно понял: приложение MACHINExxx с физическим корнем C: \ xxx \ не смогло запустить процесс с помощью командной строки dotnet. \ Xxx.dll, ErrorCode = '0x80070002: 0. И действительно, как вы говорите, мне пришлось перезапустить сервер после установки среды выполнения хостинга. Есть ли причина, по которой он не мог получить журнал?   -  person Daboul    schedule 25.04.2018
comment
Есть ли что-то, чего мне не хватает, например перезапуск сервера, который запускает приложение, если он не запускается автоматически?   -  person Berger    schedule 25.04.2018
comment
Проверьте% SystemRoot% \ System32 \ LogFiles \ HTTPERR, а также проверьте свои разрешения NTFS.   -  person Mark G    schedule 26.04.2018
comment
@MarkG HTTPERR мне не поможет, если приложение не запущено и, следовательно, не обрабатывает запросы. Какие разрешения мне нужны для папок приложений?   -  person Berger    schedule 26.04.2018


Ответы (2)


С помощью своего коллеги я нашел решение:

Разрешения:

IIS должен иметь разрешения на папки сайта. Необходимо проверить, что пользователь пула приложений имеет разрешение на доступ к папкам.

Я предоставил ЛОКАЛЬНУЮ СЛУЖБУ в моей папке C: \ inetpub \ sites, к которой принадлежат все мои сайты, а также в пуле приложений, который я использую.

web.config

WebDeploy перезаписал файл web.config и изменил его на:

<aspNetCore processPath=".\Agent.DuZu.Web.exe" 
    arguments=".\Agent.DuZu.Web.dll"
    stdoutLogEnabled="true" 
    stdoutLogFile=".\logs\stdout" 
    forwardWindowsAuthToken="false" />

Таким образом, журнал stdout показал ошибку аргумента. Решением этой проблемы является изменение processPath на dotnet, как описано в этом вопрос.

<aspNetCore processPath="dotnet" 
    arguments=".\Agent.DuZu.Web.dll"
    stdoutLogEnabled="true" 
    stdoutLogFile=".\logs\stdout" 
    forwardWindowsAuthToken="false" />

Также следует упомянуть, что необходимо создать папку журналов, потому что IIS не будет делать этого сам по себе.

person Berger    schedule 02.05.2018

Это также произошло со мной в новом проекте, в котором модуль был указан как AspNetCoreModuleV2:

  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>

Предположительно у меня он не был установлен. Я видел, что на моем более старом веб-сайте .NET Core модуль не был V2. Удаление V2 из спецификации модуля исправило его в моем случае:

  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
  </handlers>
person JessieArr    schedule 06.06.2019