ASP .NET Core WebAPI - hostowanie w IIS

Odpowiedz Nowy wątek
2019-01-14 09:37
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

Pozostało 580 znaków

2019-01-14 10:00
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

Pozostało 580 znaków

2019-01-14 10:21
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.

Pozostało 580 znaków

2019-01-14 10:23
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.

Pozostało 580 znaków

2019-01-14 10:27
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.

Pozostało 580 znaków

2019-01-14 10:38
0

Nie brakuje Ci tam czasem pliku web.config?


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.

Pozostało 580 znaków

2019-01-14 10:39
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-->

Pozostało 580 znaków

2019-01-14 10:53
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?


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.

Pozostało 580 znaków

2019-01-14 10:55
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.

Spróbuj w debug i zobacz czy działa. - Aventus 2019-01-14 11:08

Pozostało 580 znaków

2019-01-14 11:16
0

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


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.

Pozostało 580 znaków

2019-01-14 11:18
0

Chyba tak - AspNetCoreModule i AspNetCoreModuleV2.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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