Uaktualnianie projektu po stronie serwera WCF do programu CoreWCF
Asystent uaktualniania platformy .NET to narzędzie wiersza polecenia, które może pomóc w uaktualnieniu istniejącego projektu po stronie serwera WCF na platformie .NET Framework do korzystania z usług CoreWCF na platformie .NET 6. Ten artykuł zawiera:
- Rzeczy, które należy wiedzieć przed rozpoczęciem.
- Pokaz sposobu uruchamiania narzędzia względem projektu po stronie serwera WCF na platformie .NET Framework.
- Porady dotyczące rozwiązywania problemów.
Co należy wiedzieć przed rozpoczęciem
To narzędzie obsługuje obecnie projekty języka C# i używa programu CoreWCF do przenoszenia własnych projektów po stronie serwera WCF do platformy .NET 6.
Ważne
Uaktualnianie projektów programu WCF wymaga starszej wersji asystenta uaktualniania platformy .NET i nie jest zgodne z najnowszymi wersjami. Instrukcje dotyczące sposobu instalowania starszej wersji znajdują się w sekcji Instalowanie starszej wersji .
Aby projekt WCF mógł mieć zastosowanie do tego uaktualnienia, musi spełniać następujące wymagania:
Zawiera plik .cs, który odwołuje się
System.ServiceModel
i tworzy nowyServiceHost
.Jeśli projekt WCF ma wiele
ServiceHost
hostów, należy utworzyć wszystkie hosty w tej samej metodzie.Zawiera plik config, który przechowuje
System.ServiceModel
właściwości.
Bieżąca wersja narzędzia nie obsługuje projektów WCF hostowanych za pośrednictwem plików svc.
Uwaga
Jeśli projekt nie ma zastosowania do tego narzędzia, zalecamy zapoznanie się z przewodnikiem dotyczącym technologii CoreWCF i pokazem przykładu BeanWorks i ręcznej aktualizacji projektu.
Wymagania wstępne
- System operacyjny Windows
- Visual Studio 2022 w wersji 17.1 lub nowszej.
- Zestaw .NET SDK 6 lub nowszy.
- Wersja
0.4.421302
asystenta uaktualniania platformy .NET, znana jako wersja "starsza".
Instalowanie starszej wersji
Użyj polecenia , dotnet
aby zainstalować wersję 0.4.421302
asystenta uaktualniania platformy .NET.
dotnet tool install upgrade-assistant -g --version 0.4.421302
Ważne
Jeśli skonfigurowano dodatkowe źródła kanałów informacyjnych NuGet, instalacja może zakończyć się niepowodzeniem z powodu błędu wskazującego, że pakiet NuGet nie jest dostępny w kanale informacyjnym. Użyj parametru --ignore-failed-sources
, aby traktować te błędy jako ostrzeżenia zamiast błędów, pomijając inne źródła kanałów informacyjnych NuGet:
dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302
Pokazowa aplikacja
Możesz użyć projektu Basic Calculator Sample , aby przetestować uaktualnianie za pomocą Asystenta uaktualniania, który jest również pokazem używanym w tej dokumentacji.
Jeśli chcesz wypróbować bardziej skomplikowany przykład, zobacz przykład BeanWorks utworzony przez Mike'a Rousosa.
Uruchamianie asystenta uaktualnienia
Otwórz terminal i przejdź do folderu, w którym znajduje się docelowy projekt lub rozwiązanie. upgrade-assistant upgrade
Uruchom polecenie, przekazując nazwę projektu lub rozwiązania, które uaktualniasz.
Po udostępnieniu projektu proces uaktualniania rozpoczyna się od razu w tym projekcie. Jeśli zostanie podane rozwiązanie, wybierzesz, który projekt jest zwykle uruchamiany, znany jako punkt wejścia uaktualnienia. Na podstawie tego projektu tworzony jest graf zależności i sugestia, w jakiej kolejności należy uaktualnić projekty.
upgrade-assistant upgrade .\CalculatorSample.sln
Narzędzie zostanie uruchomione i wyświetli listę kroków, które wykona. Po zakończeniu każdego kroku narzędzie udostępnia zestaw poleceń, które umożliwiają użytkownikowi zastosowanie lub pominięcie następnego kroku lub innej opcji, takiej jak:
- Uzyskaj więcej informacji na temat kroku.
- Zmień projekty.
- Dostosuj ustawienia rejestrowania.
- Zatrzymaj uaktualnianie i zakończ pracę.
Naciśnięcie Enter bez wybierania liczby powoduje wybranie pierwszego elementu na liście.
Podczas inicjowania poszczególnych kroków może on dostarczyć informacje o tym, co uważa, że będzie się zdarzyć, jeśli zastosujesz krok.
Wybierz punkt wejścia i projekt do uaktualnienia
Pierwszym krokiem uaktualniania przykładu podstawowego kalkulatora jest wybranie projektu w rozwiązaniu jako projektu punktu wejścia.
Upgrade Steps
1. [Next step] Select an entrypoint
2. Select project to upgrade
Choose a command:
1. Apply next step (Select an entrypoint)
2. Skip next step (Select an entrypoint)
3. See more step details
4. Configure logging
5. Exit
Wybierz polecenie 1 , aby rozpocząć ten krok. Zostaną wyświetlone wyniki:
[10:25:42 INF] Applying upgrade step Select an entrypoint
Please select the project you run. We will then analyze the dependencies and identify the recommended order to upgrade projects.
1. CalculatorClient
2. CalculatorService
Istnieją dwa projekty na liście. Ponieważ nasze narzędzie uaktualnia projekt po stronie serwera, wybierzemy polecenie 2 , aby wybrać projekt usługi jako punkt wejścia.
Uaktualnianie projektu
Po wybraniu projektu zostanie wyświetlona lista kroków uaktualniania, które zostanie zastosowane przez narzędzie.
Ważne
Na podstawie projektu, który uaktualniasz, możesz lub nie widzisz każdego kroku wymienionego w tym przykładzie.
W poniższych danych wyjściowych opisano kroki związane z uaktualnianiem projektu:
Upgrade Steps
Entrypoint: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj
Current Project: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj
1. [Next step] Back up project
2. Convert project file to SDK style
3. Clean up NuGet package references
a. Duplicate reference analyzer
b. Package map reference analyzer
c. Target compatibility reference analyzer
d. Upgrade assistant reference analyzer
e. Windows Compatibility Pack Analyzer
f. MyDotAnalyzer reference analyzer
g. Newtonsoft.Json reference analyzer
h. Windows App SDK package analysis
i. Transitive reference analyzer
4. Update TFM
5. Update NuGet Packages
a. Duplicate reference analyzer
b. Package map reference analyzer
c. Target compatibility reference analyzer
d. Upgrade assistant reference analyzer
e. Windows Compatibility Pack Analyzer
f. MyDotAnalyzer reference analyzer
g. Newtonsoft.Json reference analyzer
h. Windows App SDK package analysis
i. Transitive reference analyzer
6. Add template files
7. Update WCF service to CoreWCF (Preview)
8. Upgrade app config files
a. Convert Application Settings
b. Convert Connection Strings
c. Disable unsupported configuration sections
9. Update source code
a. Apply fix for UA0002: Types should be upgraded
b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
c. Apply fix for UA0014: .NET MAUI projects should not reference Xamarin.Forms namespaces
d. Apply fix for UA0015: .NET MAUI projects should not reference Xamarin.Essentials namespaces
10. Move to next project
Choose a command:
1. Apply next step (Back up project)
2. Skip next step (Back up project)
3. See more step details
4. Select different project
5. Configure logging
6. Exit
Uwaga
W pozostałej części tego artykułu kroki uaktualniania nie są jawnie wyświetlane, chyba że istnieje coś ważnego do wywołania. Wyniki każdego kroku są nadal wyświetlane.
Tworzenie kopii zapasowej
W tym przykładzie uaktualniania projektu CalculatorService zastosujesz każdy krok. Pierwszym krokiem polecenia 1 jest tworzenie kopii zapasowej projektu:
[10:25:52 INF] Applying upgrade step Back up project
Please choose a backup path
1. Use default path [C:\Users\Desktop\CalculatorSample.backup]
2. Enter custom path
Narzędzie wybiera domyślną ścieżkę kopii zapasowej o nazwie po bieżącym folderze, ale z dołączonym .backup
do niego. Możesz wybrać ścieżkę niestandardową jako alternatywę dla ścieżki domyślnej. Dla każdego uaktualnionego projektu folder projektu jest kopiowany do folderu kopii zapasowej. W tym przykładzie CalculatorService
folder jest kopiowany z pliku CalculatorSample\CalculatorService do pliku CalculatorSample.backup\CalculatorService podczas wykonywania kroku tworzenia kopii zapasowej:
[10:25:53 INF] Backing up C:\Users\Desktop\CalculatorSample\CalculatorService to C:\Users\OneDrive - Microsoft\Desktop\CalculatorSample.backup\CalculatorService
[10:25:53 INF] Project backed up to C:\Users\Desktop\CalculatorSample.backup\CalculatorService
[10:25:53 INF] Upgrade step Back up project applied successfully
Please press enter to continue...
Uaktualnianie pliku projektu
Projekt jest uaktualniany z formatu projektu .NET Framework do formatu projektu .NET SDK.
[10:25:56 INF] Applying upgrade step Convert project file to SDK style
[10:25:56 INF] Converting project file format with try-convert, version 0.4.0-dev
[10:25:56 INF] Recommending executable TFM net6.0 because the project builds to an executable
C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj contains an App.config file. App.config is replaced by appsettings.json in .NET Core. You will need to delete App.config and migrate to appsettings.json if it's applicable to your project.
[10:25:58 INF] Converting project C:\Users\CalculatorSample\CalculatorService\CalculatorService.csproj to SDK style
[10:25:58 INF] Project file converted successfully! The project may require additional changes to build successfully against the new .NET target.
[10:26:00 INF] Upgrade step Convert project file to SDK style applied successfully
Zwróć uwagę na dane wyjściowe każdego kroku. Zwróć uwagę, że przykładowe dane wyjściowe wskazują, że po uaktualnieniu wykonasz krok ręczny:
Plik App.config jest zastępowany przez appsettings.json na platformie .NET Core. Musisz usunąć plik App.config i przeprowadzić migrację do appsettings.json, jeśli ma zastosowanie do projektu.
W tym przykładzie krok aktualizacji programu WCF utworzy nowy plik wcf.config na system.serviceModel
podstawie sekcji w pliku App.config. Nie będziemy musieli migrować do appsettings.json.
Czyszczenie odwołań NuGet
Po zaktualizowaniu formatu projektu następnym krokiem jest wyczyszczenie odwołań do pakietu NuGet.
Oprócz pakietów, do których odwołuje się aplikacja, plik packages.config zawiera odwołania do zależności tych pakietów. Jeśli na przykład dodano odwołanie do pakietu A, który zależy od pakietu B, oba pakiety będą odwoływały się do pliku packages.config. W nowym systemie projektu wymagane jest tylko odwołanie do pakietu A . Ten krok analizuje odwołania do pakietu i usuwa te, które nie są wymagane.
[10:26:01 INF] Initializing upgrade step Clean up NuGet package references
[10:26:01 INF] Initializing upgrade step Duplicate reference analyzer
[10:26:01 INF] No package updates needed
[10:26:01 INF] Initializing upgrade step Package map reference analyzer
[10:26:01 INF] Marking assembly reference System.configuration for removal based on package mapping configuration System.Configuration
[10:26:01 INF] Adding package System.Configuration.ConfigurationManager based on package mapping configuration System.Configuration
[10:26:01 INF] Marking assembly reference System.ServiceModel for removal based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Primitives based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Http based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Duplex based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.NetTcp based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Security based on package mapping configuration System.ServiceModel
[10:26:01 INF] Adding package System.ServiceModel.Federation based on package mapping configuration System.ServiceModel
[10:26:01 INF] Initializing upgrade step Remove reference 'System.configuration'
[10:26:03 INF] Applying upgrade step Remove reference 'System.configuration'
[10:26:03 INF] Removing outdated assembly reference: System.configuration
[10:26:03 INF] Upgrade step Remove reference 'System.configuration' applied successfully
[10:26:05 INF] Initializing upgrade step Remove reference 'System.ServiceModel'
[10:26:06 INF] Applying upgrade step Remove reference 'System.ServiceModel'
[10:26:06 INF] Removing outdated assembly reference: System.ServiceModel
[10:26:06 INF] Upgrade step Remove reference 'System.ServiceModel' applied successfully
[10:26:07 INF] Initializing upgrade step Add package 'System.Configuration.ConfigurationManager'
[10:26:09 INF] Applying upgrade step Add package 'System.Configuration.ConfigurationManager'
[10:26:09 INF] Adding package reference: System.Configuration.ConfigurationManager, Version=5.0.0
[10:26:09 INF] Upgrade step Add package 'System.Configuration.ConfigurationManager' applied successfully
[10:26:09 INF] Applying upgrade step Package map reference analyzer
[10:26:09 INF] Upgrade step Package map reference analyzer applied successfully
[10:26:10 INF] Initializing upgrade step Target compatibility reference analyzer
[10:26:10 INF] No package updates needed
[10:26:10 INF] Initializing upgrade step Upgrade assistant reference analyzer
[10:26:11 INF] Reference to .NET Upgrade Assistant analyzer package (Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, version 0.4.336902) needs to be added
[10:26:11 INF] Initializing upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers'
[10:26:13 INF] Applying upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers'
[10:26:13 INF] Adding package reference: Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers, Version=0.4.336902
[10:26:13 INF] Upgrade step Add package 'Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers' applied successfully
[10:26:13 INF] Applying upgrade step Upgrade assistant reference analyzer
[10:26:14 INF] Upgrade step Upgrade assistant reference analyzer applied successfully
[10:26:15 INF] Initializing upgrade step Windows Compatibility Pack Analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step MyDotAnalyzer reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Newtonsoft.Json reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Windows App SDK package analysis
[10:26:15 INF] No package updates needed
[10:26:15 INF] Initializing upgrade step Transitive reference analyzer
[10:26:15 INF] No package updates needed
[10:26:15 INF] Applying upgrade step Clean up NuGet package references
[10:26:15 INF] Upgrade step Clean up NuGet package references applied successfully
Aplikacja nadal odwołuje się do zestawów .NET Framework. Niektóre z tych zestawów mogą być dostępne jako pakiety NuGet. Ten krok analizuje te zestawy i odwołuje się do odpowiedniego pakietu NuGet.
W tym przykładzie aktualizator pakietów wykrywa aplikację CalculatorService jako projekt tylko dla serwera i nie ma potrzeby dodawania System.ServiceModel
pakietów. Mimo że zostały one dodane do listy na podstawie konfiguracji mapowania pakietów, te kroki nie zostały zastosowane.
Obsługa programu TFM
Następnie narzędzie zmienia program TFM z programu .NET Framework na sugerowany zestaw SDK. W tym przykładzie jest to net6.0-windows
.
[10:26:17 INF] Applying upgrade step Update TFM
[10:26:17 INF] Recommending executable TFM net6.0 because the project builds to an executable
[10:26:19 INF] Updated TFM to net6.0
[10:26:19 INF] Upgrade step Update TFM applied successfully
Uaktualnianie pakietów NuGet
Następnie narzędzie aktualizuje pakiety NuGet projektu do wersji, które obsługują zaktualizowany program TFM, net6.0-windows
.
[10:26:20 INF] Initializing upgrade step Update NuGet Packages
[10:26:20 INF] Initializing upgrade step Duplicate reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Package map reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Target compatibility reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Upgrade assistant reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Windows Compatibility Pack Analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step MyDotAnalyzer reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Newtonsoft.Json reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Windows App SDK package analysis
[10:26:20 INF] No package updates needed
[10:26:20 INF] Initializing upgrade step Transitive reference analyzer
[10:26:20 INF] No package updates needed
[10:26:20 INF] Applying upgrade step Update NuGet Packages
[10:26:20 INF] Upgrade step Update NuGet Packages applied successfully
Dodawanie plików szablonów
Po zaktualizowaniu pakietów następnym krokiem jest zaktualizowanie wszystkich plików szablonów. W tym przykładzie nie ma plików szablonów, które należy zaktualizować ani dodać do projektu. Ten krok zostanie pominięty, a następny krok zostanie uruchomiony automatycznie.
[10:26:20 INF] Initializing upgrade step Add template files
[10:26:20 INF] 0 expected template items needed
Aktualizowanie usługi WCF do platformy CoreWCF (wersja zapoznawcza)
Uwaga: w momencie pisania tej dokumentacji rozszerzenie aktualizatora WCF jest dostarczane jako wersja zapoznawcza. Jeśli masz jakiekolwiek opinie dotyczące wersji zapoznawczej, otwórz problem w repozytorium GitHub Asystenta uaktualniania z tagiem
area:WCF
.
Asystent uaktualniania najpierw zainicjuje krok aktualizatora WCF i sprawdzi, czy projekt ma zastosowanie do aktualizacji programu WCF.
[10:26:20 INF] Initializing upgrade step Update WCF service to CoreWCF (Preview)
[10:26:20 INF] This config file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\App.config. System.serviceModel/services elements were found.
[10:26:20 INF] This file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\service.cs. ServiceHost object was found.
[10:26:20 INF] This project file is applicable for upgrade: C:\Users\Desktop\CalculatorSample\CalculatorService\CalculatorService.csproj. Reference to System.serviceModel was found.
[10:26:20 INF] This project is applicable for updating to CoreWCF. Initializing the update step...
[10:26:20 INF] Updaters are successfully constructed. Ready to start update.
Choose a command:
1. Apply next step (Update WCF service to CoreWCF (Preview))
2. Skip next step (Update WCF service to CoreWCF (Preview))
3. See more step details
4. Select different project
5. Configure logging
6. Exit
Krok sprawdza plik konfiguracji, kod źródłowy i plik projektu oddzielnie, aby zdecydować, czy projekt ma zastosowanie do aktualizacji programu WCF. Jeśli projekt nie ma zastosowania (na przykład nie korzysta z usługi WCF lub nie spełnia wymagań określonych na początku artykułu), komunikat rejestrowania opisuje, który plik nie ma zastosowania i czego brakuje. Następnie krok zostanie pominięty, a następny krok zostanie uruchomiony automatycznie.
W tym przykładzie aplikacja CalculatorSample ma zastosowanie do aktualizacji programu WCF i wybierzemy polecenie 1 , aby zastosować krok.
[10:26:23 INF] Applying upgrade step Update WCF service to CoreWCF (Preview)
[10:26:23 INF] Finish updating project file.
[10:26:23 WRN] The mex endpoint is removed from .config file, and service metadata behavior is configured in the source code instead.
[10:26:23 INF] Finish updating configuration files.
[10:26:23 WRN] Changing void Main() to async Task Main() to enable awaiting starting and stopping the ASP.NET Core host.
[10:26:23 INF] Finish updating source code.
[10:26:23 INF] Finish writing changes to project file.
[10:26:23 INF] Finish writing changes to configuration files.
[10:26:23 INF] Finish writing changes to the source code to replace the ServiceHost instance(s).
[10:26:23 INF] Project was successfully updated to use CoreWCF services. Please review changes.
[10:26:23 INF] Upgrade step Update WCF service to CoreWCF (Preview) applied successfully
Ten krok tworzy aktualizacje i zapisuje je indywidualnie w oryginalnych plikach. Zwróć uwagę na dane wyjściowe, które mogą powiadomić o usunięciu oryginalnych plików lub ręcznych aktualizacji do ukończenia po uaktualnieniu.
Aktualizacja plików konfiguracji i kodu
Te kroki mogą zostać pominięte automatycznie przez narzędzie, jeśli narzędzie ustali, że nie ma nic do zrobienia dla projektu.
Po zakończeniu aktualizacji programu WCF następnym krokiem jest zaktualizowanie plików konfiguracji aplikacji. W tym przykładzie nie trzeba uaktualniać żadnych elementów w plikach konfiguracji aplikacji. Krok programu WCF zaktualizował już pliki konfiguracji, więc ten krok nie będzie narzekać na użycie nieobsługiwanego system.serviceModel
elementu . Ten krok zostanie pominięty, a następny krok zostanie uruchomiony automatycznie.
[10:26:43 INF] Initializing upgrade step Upgrade app config files
[10:26:43 INF] Found 0 app settings for upgrade:
[10:26:43 INF] Found 0 connection strings for upgrade:
[10:26:43 INF] 0 web page namespace imports need upgraded:
Ostatnim krokiem przed ukończeniem uaktualnienia tego projektu jest zaktualizowanie wszelkich nieaktualnych odwołań do kodu. Na podstawie typu projektu, który uaktualniasz, zostanie wyświetlona lista znanych poprawek kodu dla tego kroku. Niektóre poprawki mogą nie mieć zastosowania do projektu.
9. Update source code
a. Apply fix for UA0002: Types should be upgraded
b. Apply fix for UA0012: 'UnsafeDeserialize()' does not exist
c. Apply fix for UA0014: .NET MAUI projects should not reference Xamarin.Forms namespaces
d. Apply fix for UA0015: .NET MAUI projects should not reference Xamarin.Essentials namespaces
W takim przypadku żaden z sugerowanych poprawek nie ma zastosowania do przykładowego projektu, a ten krok zostanie automatycznie ukończony natychmiast po zakończeniu poprzedniego kroku.
[10:26:44 INF] Initializing upgrade step Update source code
[10:26:44 INF] Running analyzers on CalculatorService
[10:26:48 INF] Identified 0 diagnostics in project CalculatorService
[10:26:51 INF] Initializing upgrade step Move to next project
Kończenie uaktualniania
Jeśli masz więcej projektów do zmigrowania, narzędzie umożliwia wybranie projektu do uaktualnienia następnego. Jeśli nie ma już projektów do uaktualnienia, narzędzie przeprowadzi Cię do kroku "Finalizowanie uaktualnienia":
1. [Next step] Finalize upgrade
Choose a command:
1. Apply next step (Finalize upgrade)
2. Skip next step (Finalize upgrade)
3. See more step details
4. Configure logging
5. Exit
>
[10:27:15 INF] Applying upgrade step Finalize upgrade
[10:27:15 INF] Upgrade step Finalize upgrade applied successfully
W idealnym przypadku po pomyślnym uruchomieniu narzędzia te zmiany powinny pojawić się w oryginalnych plikach.
W service.cs
pliku element using System.ServiceModel
został zastąpiony odwołaniami do coreWCF. Wystąpienie ServiceHost
zostało również usunięte, a usługa była hostowana na platformie ASP.NET Core.
using System;
using System.Threading.Tasks;
using CoreWCF;
using CoreWCF.Configuration;
using CoreWCF.Description;
using CoreWCF.Security;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
public static async Task Main()
{
var builder = WebApplication.CreateBuilder();
// Set up port (previously this was done in configuration,
// but CoreWCF requires it be done in code)
builder.WebHost.UseNetTcp(8090);
builder.WebHost.ConfigureKestrel(options =>
{
options.ListenAnyIP(8080);
});
// Add CoreWCF services to the ASP.NET Core app's DI container
builder.Services.AddServiceModelServices()
.AddServiceModelConfigurationManagerFile("wcf.config")
.AddServiceModelMetadata()
.AddTransient<CalculatorSample.CalculatorService>();
var app = builder.Build();
// Enable getting metadata/wsdl
var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
serviceMetadataBehavior.HttpGetEnabled = true;
serviceMetadataBehavior.HttpGetUrl = new Uri("http://localhost:8080/CalculatorSample/metadata");
// Configure CoreWCF endpoints in the ASP.NET Core hosts
app.UseServiceModel(serviceBuilder =>
{
serviceBuilder.AddService<CalculatorSample.CalculatorService>(serviceOptions =>
{
serviceOptions.DebugBehavior.IncludeExceptionDetailInFaults = true;
});
serviceBuilder.ConfigureServiceHostBase<CalculatorSample.CalculatorService>(serviceHost =>
{
});
});
await app.StartAsync();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
await app.StopAsync();
}
W przypadku plików system.serviceModel
konfiguracji sekcja w pliku App.config
została przeniesiona do nowego pliku wcf.config
konfiguracji, który został wygenerowany podczas aktualizacji.
App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- system.serviceModel section is moved to a separate wcf.config file located at the same directory as this file.-->
</configuration>
wcf.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<services>
<service name="CalculatorSample.CalculatorService" behaviorConfiguration="CalculatorServiceBehavior">
<!--The host element is not supported in configuration in CoreWCF. The port that endpoints listen on is instead configured in the source code.-->
<!--<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8090/CalculatorSample/service" />
<add baseAddress="http://localhost:8080/CalculatorSample/service" />
</baseAddresses>
</host>-->
<!-- this endpoint is exposed at the base address provided by host: net.tcp://localhost:8090/CalculatorSample/service -->
<endpoint address="/CalculatorSample/service" binding="netTcpBinding" contract="CalculatorSample.ICalculator" />
<!-- the mex endpoint is exposed at http://localhost:8080/CalculatorSample/service/ -->
<!--The mex endpoint is removed because it's not support in CoreWCF. Instead, the metadata service is enabled in the source code.-->
</service>
</services>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
<!--The behavior element is not supported in configuration in CoreWCF. Some service behaviors, such as metadata, are configured in the source code.-->
<!--<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>-->
</system.serviceModel>
</configuration>
Na koniec w pliku CalculatorService.csproj
projektu zestaw SDK został zaktualizowany w celu Microsoft.NET.Sdk.Web
włączenia ASP.NET Core hostów i odwołań do pakietu CoreWCF.
<ItemGroup>
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
<PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.4.336902">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="CoreWCF.NetTcp" Version="1.1.0" />
<PackageReference Include="CoreWCF.Primitives" Version="1.1.0" />
<PackageReference Include="CoreWCF.ConfigurationManager" Version="1.1.0" />
<PackageReference Include="CoreWCF.Http" Version="1.1.0" />
<PackageReference Include="CoreWCF.WebHttp" Version="1.1.0" />
</ItemGroup>
Zwróć uwagę, że w aplikacji CalculatorSample nie istnieje zależność od projektu do projektu, a przykład może zostać uruchomiony pomyślnie po zaktualizowaniu usługi CalculatorService. Jednak w innych przypadkach z różnymi zależnościami może być konieczne zaktualizowanie innych projektów w tym samym rozwiązaniu.
Po uaktualnieniu
Po uaktualnieniu projektów należy je skompilować i przetestować. Asystent uaktualniania zrobi to, co może, ale nie może rozwiązać każdej niezgodności w ramach uaktualnienia projektu. Na przykład możliwe jest, że wersja programu .NET Framework aplikacji zawiera odwołania do biblioteki, których projekt nie używa. Należy przeanalizować każde odwołanie i określić, czy jest to wymagane. Narzędzie mogło również dodać lub uaktualnić odwołanie pakietu NuGet do niewłaściwej wersji.
Wskazówki dotyczące rozwiązywania problemów
Istnieje kilka znanych problemów, które mogą wystąpić podczas korzystania z Asystenta uaktualniania platformy .NET. W niektórych przypadkach te problemy dotyczą narzędzia try-convert używanego wewnętrznie przez asystenta uaktualniania platformy .NET.
Repozytorium GitHub narzędzia zawiera więcej porad dotyczących rozwiązywania problemów i znanych problemów.