Siemanko.
Całkiem nie dawno pisałem o tym, że udało mi się przejść na wersję RC2 frameworka Asp.Net Core. Wersję, której żywot określono na krótko bo pod koniec czerwca ma wyjść już RTM. Z tego względu wydawałoby się, że jest to już dopieszczona wersja i wszystko jest w niej cacy… ale niestety.
Problemy z SignalR
W wersji RC1, w moim projekcie zacząłem się już komunikować poprzez SignalR między apką mobilną, a serwerem. Po upgrade’dzie projektu do wersji RC2 po chwilce przerwy przysiadłem znowu do pracy i ku mojemu zdziwieniu po próbie połączenia się apki z serwerem aplikacja mobilna się wywalała. Zapewne znasz to uczucie gdy nie zmieniłeś choć jednej linijki kodu, IDE nie sypie errorami, a coś co działało jeszcze wczoraj z niewiadomych przyczyn przestało. Po kilku godzinach prób zacząłem debugowanko na serwerze. W Sturtup.cs przed deklaracją SignalR zamieściłem kilka linijek kodu aby następne wywołanie na pipeline złapać w try catch:
Zacząłem googlować i doklikałem się do issue na githubie. Otóż w wersji RC2 popsuto coś co działało w RC1 😉
Workaround
Gość na githubie podsunął mi tymczasowe rozwiązanie. Otóż bug jest w klasie DefaultAssemblyLocator.cs, który został już poprawiony, ale znajduje się w paczce RC3 z referencjami do inncyh paczek RC3, które zarazem będą się gryzły z RC2. Skopiowałem kod tej klasy i umieściłem go w swoim projekcie w nowo utworzonej klasie o nazwie HubCouldNotBeResolvedWorkaround (możesz nazwać jak chcesz). W Sturtup.cs w metodzie ConfigureServices tuż przed wywołaniem
services.AddSignalR();
należy umieścić linijkę
services.AddSingleton<IAssemblyLocator, HubCouldNotBeResolvedWorkaround>();
Ten kod oznacza ni mniej ni więcej jak dla każdej zależności IAssemblyLocator wstrzyknij obiekt HubCouldNotBeResolvedWorkaround, który ma być singletonem w ramach całej aplikacji. W ten sposób IAssemblyLocator z paczki SignalR RC2 z bugiem został zastąpiony poprawionym z wersji RC3 bez konieczności upgrade’u całego projektu do RC3 (która jest tylko na deweloperskich serwerach Nuget)
Podsumowanie
Mam nadzieje, że dzięki temu wpisowi zaoszczędzisz kilka godzin na kminienie co może być nie tak – tak jak ja.
Pjona!