ASP .NET Core WebAPI - hostowanie w IIS

0

Witam.
Drugi dzień już walcze z tym i szlak mnie trafia, bo to nie jest tak jak w tych tutorialach na necie.
Próbuje na IIS hostować WebAPI i niby konfiguracja banalna, ale jednak u mnie nie działa.

  1. Zrobiłem folder z projektem C:\inetpub\wwwroot\api
  2. Zrobiłem Publish projektu i wkleiłem do folderu z punktu 1
  3. Dodałem nową witrynę do IIS - bez nazwy hosta, adresy IP - Wszystkie nieprzypisane, port 9009
  4. W Program.cs mam
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseUrls("http://*:9009")
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>();
    }

    Odpalam witrynę w przeglądarce to mam błąd:

    HTTP Error 500.30 - ANCM In-Process Start Failure
    Common causes of this issue:
    The application failed to start
    The application started but then stopped
    The application started but threw an exception during startup
    Troubleshooting steps:
    Check the system event log for error messages
    Enable logging the application process' stdout messages
    Attach a debugger to the application process and inspect
    For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028265

    Sprawdzam co ciekawego pokazują logi systemowe, są dwa błędy:

    Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\api\' failed to load clr and managed application. CLR worker thread exited prematurely
    Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\api\' hit unexpected managed exception, exception code = '0xe0434352'. Last 4KB characters of captured stdout and stderr logs:
    Application startup exception: System.NullReferenceException: Object reference not set to an instance of an object.
    at API.Startup.ConfigureServices(IServiceCollection services) in C:\Users\user\source\repos\API\API\Startup.cs:line 34
    --- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
    --- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
    crit: Microsoft.AspNetCore.Hosting.Internal.WebHost[6]
      Application startup exception
    System.NullReferenceException: Object reference not set to an instance of an object.
    at API.Startup.ConfigureServices(IServiceCollection services) in C:\Users\user\source\repos\API\API\Startup.cs:line 34
    --- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
    --- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
    crit: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to start Kestrel.
    System.IO.IOException: Failed to bind to address http://[::]:9009: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Tylko jedno użycie każdego adresu gniazda (protokół/adres sieciowy/port) jest normalnie dozwolone ---> System.Net.Sockets.SocketException: Tylko jedno użycie każdego adresu gniazda (protokół/adres sieciowy/port) jest normalnie dozwolone
    at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
    at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
    at System.Net.Sockets.Socket.Bind(EndPoint localEP)
    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync()
    --- End of inner exception stack trace ---
    at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransport.BindAsync()
    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.<>c__DisplayClass21_0`1.<<StartAsync>g__OnBind|0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context)
    --- End of inner exception stack trace ---
    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context)
    at Microsoft.AspNetCore.Server.Kestrel.Core.ListenOptions.BindAsync(AddressBindContext context)
    at Microsoft.AspNetCore.Server.Kestrel.Core.AnyIPListenOptions.BindAsync(AddressBindContext context)
    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context)
    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(IServerAddressesFeature addresses, KestrelServerOptions serverOptions, ILogger logger, Func`2 createBinding)
    at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken)

    Nie mam nic innego włączonego na porcie 9009. Nie mam zielonego pojęcia co robię źle...

PS.
Próbuje to uruchomić na Windows 10 Pro 1809 (17763.253).
ASP .NET Core jest w wersji 2.2

1

Masz .UseKestrel().UseUrls("http://*:9009"), czyli próbujesz wystartować wbudowany serwer (Kestrel) na porcie 9009, a już IIS słucha na tym porcie, więc nie może wystartować.

Jeżeli chcesz korzystać z IIS i "in-process hosting", to musisz tam mieć .UseIIS(), bo inaczej IIS działa tylko jako reverse-proxy dla Kestrela. https://docs.microsoft.com/pl[...]ploy/iis/?view=aspnetcore-2.2

0

Zmieniłem na .UseIIS() i teraz mam błąd co mi bardzo dużo mówi:

An error occurred while starting the application.
.NET Core 4.6.27207.03 X64 v4.0.0.0 | Microsoft.AspNetCore.Hosting version 2.2.0-rtm-35687  |  Microsoft Windows 10.0.17763  |  Need help?

W logach systemowych mam:

Application 'C:\inetpub\wwwroot\api\' started the coreclr in-process successfully.
0

Dodatkowo musisz pamiętać żeby ustawić na puli aplikacji Wersję Środowiska na "Bez kodu zarządzalnego" i mieć doinstalowane odpowiednie paczki dla .net core w systemie.

0

@Bogu: Mam paczki z .net core i mam w puli wybraną opcję Bez kodu zarządzalnego

PS.
Jak w consoli odpalę dotnet API.dll to się wszystko poprawnie uruchamia i działa.

0

Nie brakuje Ci tam czasem pliku web.config?

0

Nie brakuje

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\API.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 846eed54-fc74-4a39-8bda-1db340f3e36d-->
0

Głupie pytanie, ale działało Ci to wcześniej? Ja od wczoraj mam podobny problem, DLLki zbudowane w release mode rzucają ten sam błąd, mimo że wcześniej działało jak należy. Wrzucasz pod IIS debug czy release build?

0

Nie miałem tego wcześniej na IIS, ponieważ byłem w trakcie pisania. Skończyłem już jakąś część i chciałem to udostępnić na zewnątrz do testów i takie jaja. Publish robię w release.

0

Czy serwer IIS ma zainstalowaną tą samą wersję .Net Core co wersja pod którą budujesz kod?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0