WCF kiszolgálóoldali projekt frissítése CoreWCF-re
A .NET frissítési segéd egy parancssori eszköz, amely segíthet egy meglévő WCF kiszolgálóoldali projekt frissítésében a .NET-keretrendszer CoreWCF-szolgáltatások .NET 6-on való használatához. Ez a cikk a következő információkat tartalmazza:
- Tudnivalók a kezdés előtt.
- Annak bemutatása, hogyan futtathatja az eszközt egy WCF kiszolgálóoldali projekten .NET-keretrendszer.
- Hibaelhárítási tippek.
Tudnivalók a kezdés előtt
Ez az eszköz jelenleg támogatja a C#-projekteket, és a CoreWCF használatával portozza a saját üzemeltetésű WCF-kiszolgálóoldali projekteket a .NET 6-ba.
Fontos
A WCF-projektek frissítéséhez a .NET frissítési segéd régebbi verziója szükséges, és nem kompatibilis a legújabb verziókkal. Az örökölt verzió telepítésével kapcsolatos utasításokat az Örökölt verzió telepítése szakaszban találja.
Ahhoz, hogy egy WCF-projekt alkalmazható legyen erre a frissítésre, meg kell felelnie a következő követelményeknek:
Tartalmaz egy .cs fájlt, amely hivatkozik
System.ServiceModel
, és újatServiceHost
hoz létre.Ha a WCF-projekt több
ServiceHost
, akkor minden gazdagépet ugyanabban a metódusban kell létrehozni.Tartalmaz egy .config fájlt, amely tulajdonságokat tárol
System.ServiceModel
.
Az eszköz jelenlegi verziója nem támogatja a .svc fájlokon keresztül üzemeltetett WCF-projekteket.
Feljegyzés
Ha a projekt nem alkalmazható erre az eszközre, javasoljuk, hogy tekintse meg a CoreWCF útmutatóját és a BeanTrader-minta bemutatóját, és frissítse manuálisan a projektet.
Előfeltételek
- Windows operációs rendszer
- A Visual Studio 2022 17.1-es vagy újabb verziója.
- .NET SDK 6 vagy újabb.
- A
0.4.421302
.NET Upgrade Assistant verziója, más néven az "örökölt" verzió.
Az örökölt verzió telepítése
A parancs használatával telepítse a dotnet
.NET Upgrade Assistant verzióját 0.4.421302
.
dotnet tool install upgrade-assistant -g --version 0.4.421302
Fontos
Ha további NuGet-hírcsatornák forrásait konfigurálta, a telepítés meghiúsulhat, ha hiba történt, amely azt jelzi, hogy a NuGet-csomag nem érhető el a hírcsatornában. A paraméterrel a --ignore-failed-sources
hibák helyett figyelmeztetésként kezelheti ezeket a hibákat, megkerülve a többi NuGet-hírcsatornaforrást:
dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302
Bemutató alkalmazás
Az Alapszintű kalkulátor mintaprojekttel tesztelheti a frissítési segéddel való frissítést, amely szintén a jelen dokumentációban használt bemutató.
Ha bonyolultabb mintát szeretne kipróbálni, tekintse meg a Mike Rousos által létrehozott BeanTrader-mintát .
Frissítési segéd futtatása
Nyisson meg egy terminált, és keresse meg azt a mappát, amelyben a célprojekt vagy megoldás található. Futtassa a upgrade-assistant upgrade
parancsot, és adja meg a frissíteni kívánt projekt vagy megoldás nevét.
Ha egy projekt meg van adva, a frissítési folyamat azonnal elindul az adott projekten. Ha van megoldás, kiválaszthatja, hogy melyik projektet futtatja általában, más néven a frissítés belépési pontját. A projekt alapján létrejön egy függőségi gráf, és javaslatot kap arra vonatkozóan, hogy milyen sorrendben frissítse a projekteket.
upgrade-assistant upgrade .\CalculatorSample.sln
Az eszköz fut, és megjeleníti a végrehajtandó lépések listáját. Minden lépés befejezésekor az eszköz parancsokat biztosít, amelyek lehetővé teszik a felhasználó számára, hogy alkalmazza vagy kihagyja a következő lépést, vagy más lehetőséget, például:
- További információ a lépésről.
- Projektek módosítása.
- Módosítsa a naplózási beállításokat.
- Állítsa le a frissítést, és lépjen ki.
Ha az Enter billentyűt szám kiválasztása nélkül lenyomja, a lista első elemét választja ki.
Az egyes lépések inicializálása során információt kaphat arról, hogy mit gondol, mi fog történni a lépés alkalmazásakor.
Válassza ki a frissíteni kívánt belépési pontot és projektet
Az Alapszintű kalkulátorminta frissítésének első lépése, hogy kiválasztja, hogy a megoldás melyik projektje szolgál belépési pontként.
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
A lépés elindításához válassza az 1 . parancsot. Az eredmények a következők:
[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
Két projekt szerepel a listán. Mivel eszközünk frissíti a kiszolgálóoldali projektet, a 2. parancsot választva kiválasztjuk a szolgáltatási projektet belépési pontként.
A projekt frissítése
A projekt kiválasztása után megjelenik az eszköz által végrehajtott frissítési lépések listája.
Fontos
A frissített projekt alapján előfordulhat, hogy a példában felsorolt minden lépés megjelenik vagy nem jelenik meg.
A következő kimenet a projekt frissítésének lépéseit ismerteti:
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
Feljegyzés
A cikk további részében a frissítési lépések csak akkor jelennek meg explicit módon, ha van valami fontos, amit fel kell hívni. Az egyes lépések eredményei továbbra is megjelennek.
Biztonsági mentés létrehozása
A CalculatorService projekt frissítését szemléltető példában minden lépést alkalmazni fog. Az első lépés, az 1. parancs a projekt biztonsági mentése:
[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
Az eszköz kiválaszt egy alapértelmezett biztonsági mentési útvonalat, amely az aktuális mappáról van elnevezve, de .backup
hozzá van fűzve. Az alapértelmezett elérési út alternatívaként választhat egyéni elérési utat. Minden frissített projekt esetében a program a projekt mappáját a biztonsági mentési mappába másolja. Ebben a példában a mappa a CalculatorService
CalculatorSample\CalculatorService fájlból a CalculatorSample.backup\CalculatorService mappába lesz másolva a biztonsági mentési lépés során:
[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...
A projektfájl frissítése
A projekt a .NET-keretrendszer projektformátumról .NET SDK-projektformátumra frissül.
[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
Ügyeljen az egyes lépések kimenetére. Figyelje meg, hogy a példakimenet azt jelzi, hogy a frissítés után manuálisan kell elvégeznie a lépéseket:
Az App.config helyére a .NET Core-ban appsettings.json kerül. Törölnie kell az App.config-t, és át kell telepítenie a appsettings.json, ha az alkalmazható a projektre.
Ebben a példában a WCF frissítési lépése létrehoz egy új wcf.config-konfigurációt az system.serviceModel
App.config szakasz alapján. Nem kell áttelepülnünk a appsettings.json.
NuGet-hivatkozások törlése
A projektformátum frissítése után a következő lépés a NuGet-csomaghivatkozások törlése.
Az alkalmazás által hivatkozott csomagokon kívül a packages.config fájl az adott csomagok függőségeire mutató hivatkozásokat is tartalmaz. Ha például a B csomagtól függő A csomagra mutató hivatkozást ad hozzá, a rendszer mindkét csomagra hivatkozik a packages.config fájlban. Az új projektrendszerben csak az A csomagra való hivatkozás szükséges. Ez a lépés elemzi a csomaghivatkozásokat, és eltávolítja azokat, amelyek nem szükségesek.
[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
Az alkalmazás továbbra is .NET-keretrendszer szerelvényekre hivatkozik. Egyes szerelvények NuGet-csomagokként is elérhetők lehetnek. Ez a lépés elemzi ezeket a szerelvényeket, és a megfelelő NuGet-csomagra hivatkozik.
Ebben a példában a csomagfrissítő kiszolgálói projektként észleli a CalculatorService szolgáltatást, és nincs szükség csomagok hozzáadására System.ServiceModel
. Annak ellenére, hogy a csomagleképezés konfigurációja alapján hozzáadták őket a listához, ezek a lépések nem lettek alkalmazva.
A TFM kezelése
Az eszköz ezután a TFM-et .NET-keretrendszer-ről a javasolt SDK-ra módosítja. Ebben a példában ez a következő 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
NuGet-csomagok frissítése
Ezután az eszköz frissíti a projekt NuGet-csomagjait a frissített TFM-et támogató verziókra. 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
Sablonfájlok hozzáadása
A csomagok frissítése után a következő lépés a sablonfájlok frissítése. Ebben a példában nincsenek olyan sablonfájlok, amelyeket frissíteni vagy hozzáadni kell a projekthez. A rendszer kihagyja ezt a lépést, és a következő lépés automatikusan elindul.
[10:26:20 INF] Initializing upgrade step Add template files
[10:26:20 INF] 0 expected template items needed
WCF-szolgáltatás frissítése a CoreWCF-hez (előzetes verzió)
Megjegyzés: A dokumentáció megírásakor a WCF updater bővítmény előzetes kiadásként érhető el. Ha visszajelzést szeretne küldeni az előzetes verzióról, nyisson meg egy hibát a GitHub Frissítési segéd tárházában címkével
area:WCF
.
A frissítési segéd először inicializálja a WCF Updater lépést, és ellenőrzi, hogy a projekt alkalmazható-e a WCF-frissítésre.
[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
A lépés külön ellenőrzi a konfigurációs fájlt, a forráskódot és a projektfájlt, hogy eldöntse, a projekt alkalmazható-e a WCF-frissítésre. Ha a projekt nem alkalmazható (például nem használja a WCF-et, vagy nem felel meg a cikk elején meghatározott követelményeknek), a naplózási üzenet leírja, hogy melyik fájl nem alkalmazható, és mi hiányzott. Ezután a rendszer kihagyja a lépést, és a következő lépés automatikusan elindul.
Ebben a mintában a CalculatorSample a WCF-frissítésre alkalmazható, és az 1. parancsot választjuk a lépés végrehajtásához.
[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
Ez a lépés létrehozza a frissítéseket, és egyenként írja őket az eredeti fájlokba. Ügyeljen a kimenetre, amely értesítheti önt az eredeti fájlok eltávolításáról vagy a manuális frissítésekről, amelyeket a frissítés után végre kell hajtani.
Konfigurációs és kódfájlok frissítése
Előfordulhat, hogy az eszköz automatikusan kihagyja ezeket a lépéseket, ha az eszköz megállapítja, hogy nincs teendő a projekthez.
A WCF-frissítés befejezése után a következő lépés az alkalmazáskonfigurációs fájlok frissítése. Ebben a példában semmit sem kell frissíteni az alkalmazáskonfigurációs fájlokban. A WCF-lépés már frissítette a konfigurációs fájlokat, így ez a lépés nem panaszkodik a nem támogatottak system.serviceModel
használatára. A rendszer kihagyja ezt a lépést, és a következő lépés automatikusan elindul.
[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:
A projekt frissítése előtt az utolsó lépés az elavult kódhivatkozások frissítése. A frissítendő projekt típusa alapján megjelenik a lépéshez ismert kódjavítások listája. Előfordulhat, hogy a javítások némelyike nem vonatkozik a projektre.
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
Ebben az esetben a javasolt javítások egyike sem vonatkozik a példaprojektre, és ez a lépés közvetlenül az előző lépés befejezése után automatikusan befejeződik.
[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
A frissítés befejezése
Ha további projekteket szeretne migrálni, az eszköz segítségével kiválaszthatja, hogy melyik projektet frissítse tovább. Ha nincs több frissítendő projekt, az eszköz a "Frissítés véglegesítése" lépéshez vezet:
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
Ideális esetben az eszköz sikeres futtatása után ezeknek a módosításoknak az eredeti fájlokban kell megjelenniük.
A service.cs
fájlban a using System.ServiceModel
CoreWCF-re mutató hivatkozások váltották fel. A ServiceHost
példányt is eltávolították, és a szolgáltatást a ASP.NET Core-on üzemeltették.
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();
}
A konfigurációs fájlok esetében a system.serviceModel
szakasz App.config
át lett helyezve az új konfigurációs fájlba wcf.config
, amely a frissítés során jött létre.
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>
Végül a projektfájlban frissítettük az SDK-t, CalculatorService.csproj
hogy Microsoft.NET.Sdk.Web
engedélyezve legyen ASP.NET Core-gazdagép és a CoreWCF-csomaghivatkozások.
<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>
Figyelje meg, hogy a CalculatorSample-ben nincs projekt–projekt függőség, és a minta csak a CalculatorService frissítése után futtatható sikeresen. Más, különböző függőségekkel rendelkező esetekben azonban előfordulhat, hogy más projekteket is frissítenie kell ugyanabban a megoldásban.
Frissítés után
A projektek frissítése után le kell fordítania és tesztelnie kell őket. A frissítési segéd mindent megtesz, de a projektfrissítés részeként nem tud minden kompatibilitást megoldani. Előfordulhat például, hogy az alkalmazás .NET-keretrendszer verziója olyan kódtár-hivatkozásokat tartalmazott, amelyeket a projekt valójában nem használ. Elemeznie kell az egyes hivatkozásokat, és meg kell állapítania, hogy szükséges-e. Előfordulhat, hogy az eszköz nem megfelelő verzióra adott hozzá vagy frissített egy NuGet-csomaghivatkozást.
Hibaelhárítási tippek
A .NET frissítési segéd használatakor számos ismert probléma léphet fel. Bizonyos esetekben ezek a problémák a .NET Upgrade Assistant által belsőleg használt try-convert eszközzel kapcsolatosak.
Az eszköz GitHub-adattárában további hibaelhárítási tippek és ismert problémák érhetők el.