Een WCF Server-side Project upgraden naar CoreWCF
De .NET Upgrade Assistant is een opdrachtregelprogramma dat kan helpen bij het upgraden van een bestaand WCF-serverproject op .NET Framework om CoreWCF-services op .NET 6 te gebruiken. Dit artikel bevat:
- Dingen die u moet weten voordat u begint.
- Een demonstratie van het uitvoeren van het hulpprogramma op een WCF Server-side project op .NET Framework.
- Tips voor probleemoplossing.
Dingen die u moet weten voordat u begint
Dit hulpprogramma ondersteunt momenteel C#-projecten en gebruikt CoreWCF voor het overzetten van zelf-hostende WCF Server-projecten naar .NET 6.
Belangrijk
Voor het upgraden van WCF-projecten is een verouderde versie van .NET Upgrade Assistant vereist en is deze niet compatibel met de nieuwste versies. Instructies voor het installeren van de verouderde versie vindt u in de sectie De verouderde versie installeren.
Voor een WCF-project dat van toepassing is op deze upgrade, moet het voldoen aan de volgende vereisten:
Bevat een .cs-bestand dat verwijst naar
System.ServiceModel
en nieuwServiceHost
maakt.Als het WCF-project meerdere
ServiceHost
heeft, moeten alle hosts in dezelfde methode worden gemaakt.Bevat een .config-bestand waarin eigenschappen worden opgeslagen
System.ServiceModel
.
De huidige versie van het hulpprogramma biedt geen ondersteuning voor WCF-projecten die worden gehost via .svc-bestanden.
Notitie
Als uw project niet van toepassing is op dit hulpprogramma, raden we u aan de handleiding coreWCF en bean Traders Sample demo te bekijken en het project handmatig bij te werken.
Vereisten
- Windows-besturingssysteem
- Visual Studio 2022 versie 17.1 of hoger.
- .NET SDK 6 of hoger.
- Versie
0.4.421302
van .NET Upgrade Assistant, ook wel de verouderde versie genoemd.
De verouderde versie installeren
Gebruik de opdracht om versie dotnet
0.4.421302
van .NET Upgrade Assistant te installeren.
dotnet tool install upgrade-assistant -g --version 0.4.421302
Belangrijk
Als u extra NuGet-feedbronnen hebt geconfigureerd, kan de installatie mislukken met een fout die aangeeft dat het NuGet-pakket niet beschikbaar is in de feed. Gebruik de --ignore-failed-sources
parameter om deze fouten te behandelen als waarschuwingen in plaats van fouten, waarbij de andere NuGet-feedbronnen worden overgeslagen:
dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302
Demo-app
U kunt het voorbeeldproject Basiscalculator gebruiken om de upgrade te testen met de upgradeassistent. Dit is ook de demo die in deze documentatie wordt gebruikt.
Als u een gecompliceerder voorbeeld wilt uitproberen, raadpleegt u het Bean Traders-voorbeeld dat is gemaakt door Mike Rousos.
Upgradeassistent uitvoeren
Open een terminal en navigeer naar de map waar het doelproject of de doeloplossing zich bevindt. Voer de upgrade-assistant upgrade
opdracht uit, waarbij u de naam van het project of de oplossing doorgeeft die u wilt upgraden.
Wanneer er een project wordt opgegeven, wordt het upgradeproces onmiddellijk gestart op dat project. Als er een oplossing is opgegeven, selecteert u welk project u normaal gesproken uitvoert, ook wel het toegangspunt voor de upgrade genoemd. Op basis van dat project wordt een afhankelijkheidsgrafiek gemaakt en wordt een suggestie gegeven voor de volgorde waarin u de projecten moet upgraden.
upgrade-assistant upgrade .\CalculatorSample.sln
Het hulpprogramma wordt uitgevoerd en toont een lijst met de stappen die het uitvoert. Wanneer elke stap is voltooid, biedt het hulpprogramma een set opdrachten waarmee de gebruiker de volgende stap of een andere optie kan toepassen of overslaan, zoals:
- Meer informatie over de stap.
- Projecten wijzigen.
- Instellingen voor logboekregistratie aanpassen.
- Stop de upgrade en sluit af.
Als u op Enter drukt zonder een getal te kiezen, wordt het eerste item in de lijst geselecteerd.
Wanneer elke stap wordt geïnitialiseerd, kan deze informatie geven over wat er gebeurt als u de stap toepast.
Selecteer het toegangspunt en het project dat u wilt upgraden
De eerste stap bij het bijwerken van het basiscalculatorvoorbeeld is het kiezen van welk project in de oplossing fungeert als het beginpuntproject.
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
Kies opdracht 1 om die stap te starten. De resultaten worden weergegeven:
[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
Er worden twee projecten weergegeven. Omdat het hulpprogramma het project aan de serverzijde bijwerkt, kiezen we opdracht 2 om het serviceproject als toegangspunt te selecteren.
Het project upgraden
Zodra een project is geselecteerd, wordt een lijst weergegeven met de upgradestappen die het hulpprogramma uitvoert.
Belangrijk
Op basis van het project dat u wilt upgraden, ziet u mogelijk of niet elke stap in dit voorbeeld wordt vermeld.
In de volgende uitvoer worden de stappen beschreven die nodig zijn voor het upgraden van het project:
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
Notitie
Voor de rest van dit artikel worden de upgradestappen niet expliciet weergegeven, tenzij er iets belangrijks is om aan te roepen. De resultaten van elke stap worden nog steeds weergegeven.
Maak een back-up
In dit voorbeeld van het upgraden van het CalculatorService-project past u elke stap toe. De eerste stap, opdracht 1, maakt een back-up van het project:
[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
Het hulpprogramma kiest een standaardback-uppad dat is vernoemd naar de huidige map, maar waaraan .backup
het is toegevoegd. U kunt een aangepast pad kiezen als alternatief voor het standaardpad. Voor elk bijgewerkt project wordt de map van het project gekopieerd naar de back-upmap. In dit voorbeeld wordt de CalculatorService
map gekopieerd van CalculatorSample\CalculatorService naar CalculatorSample.backup\CalculatorService tijdens de back-upstap:
[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...
Het projectbestand upgraden
Het project wordt bijgewerkt van de .NET Framework-projectindeling naar de .NET SDK-projectindeling.
[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
Let op de uitvoer van elke stap. U ziet dat de voorbeelduitvoer aangeeft dat u een handmatige stap moet uitvoeren na de upgrade:
App.config wordt vervangen door appsettings.json in .NET Core. U moet App.config verwijderen en migreren naar appsettings.json als deze van toepassing is op uw project.
In dit voorbeeld maakt de WCF-updatestap een nieuwe wcf.config op basis van de system.serviceModel
sectie in App.config. We hoeven niet te migreren naar appsettings.json.
NuGet-verwijzingen opschonen
Zodra de projectindeling is bijgewerkt, is de volgende stap het opschonen van de NuGet-pakketverwijzingen.
Naast de pakketten waarnaar wordt verwezen door uw app, bevat het bestand packages.config verwijzingen naar de afhankelijkheden van deze pakketten. Als u bijvoorbeeld een verwijzing hebt toegevoegd naar pakket A die afhankelijk is van pakket B, worden beide pakketten in het bestand packages.config verwezen. In het nieuwe projectsysteem is alleen de verwijzing naar pakket A vereist. Met deze stap worden de pakketverwijzingen geanalyseerd en worden de verwijzingen verwijderd die niet vereist zijn.
[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
Uw app verwijst nog steeds naar .NET Framework-assembly's. Sommige van deze assembly's zijn mogelijk beschikbaar als NuGet-pakketten. Deze stap analyseert deze assembly's en verwijst naar het juiste NuGet-pakket.
In dit voorbeeld detecteert de pakketupdater de CalculatorService als een server-only-project en hoeft u geen pakketten toe te voegen System.ServiceModel
. Hoewel ze zijn toegevoegd aan de lijst op basis van de configuratie van pakkettoewijzing, zijn deze stappen niet toegepast.
De TFM verwerken
Het hulpprogramma wijzigt vervolgens de TFM van .NET Framework in de voorgestelde SDK. In dit voorbeeld is het 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-pakketten upgraden
Vervolgens werkt het hulpprogramma de NuGet-pakketten van het project bij naar de versies die ondersteuning bieden voor de bijgewerkte 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
Sjabloonbestanden toevoegen
Zodra de pakketten zijn bijgewerkt, is de volgende stap het bijwerken van sjabloonbestanden. In dit voorbeeld zijn er geen sjabloonbestanden die moeten worden bijgewerkt of toegevoegd aan het project. Deze stap wordt overgeslagen en de volgende stap wordt automatisch gestart.
[10:26:20 INF] Initializing upgrade step Add template files
[10:26:20 INF] 0 expected template items needed
WCF-service bijwerken naar CoreWCF (preview)
Opmerking: op het moment dat deze documentatie is geschreven, wordt de WCF-updater-extensie geleverd als preview-versie. Als u feedback hebt voor de preview-versie, opent u een probleem in de GitHub-opslagplaats upgradeassistent met
area:WCF
tag.
De upgradeassistent initialiseert eerst de WCF Updater-stap en controleert of het project van toepassing is op WCF-update.
[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
De stap controleert het configuratiebestand, de broncode en het projectbestand afzonderlijk om te bepalen of het project van toepassing is op WCF-update. Als het project niet van toepassing is (zoals het niet gebruiken van WCF of niet voldoet aan de vereisten die aan het begin van het artikel zijn vermeld), zou het logboekbericht beschrijven welk bestand niet van toepassing was en wat er ontbreekt. Vervolgens wordt de stap overgeslagen en wordt de volgende stap automatisch gestart.
In dit voorbeeld is CalculatorSample van toepassing op WCF-update en kiezen we opdracht 1 om de stap toe te passen.
[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
Met deze stap maakt u de updates en schrijft u ze afzonderlijk naar de oorspronkelijke bestanden. Let op de uitvoer, die u mogelijk informeert over het verwijderen van oorspronkelijke bestanden of handmatige updates die na de upgrade moeten worden voltooid.
Configuratie- en codebestanden bijwerken
Deze stappen kunnen automatisch worden overgeslagen door het hulpprogramma als het hulpprogramma bepaalt dat er niets te doen is voor uw project.
Nadat de WCF-update is voltooid, bestaat de volgende stap uit het bijwerken van app-configuratiebestanden. In dit voorbeeld hoeft er niets te worden bijgewerkt in de app-configuratiebestanden. De WCF-stap heeft de configuratiebestanden al bijgewerkt, zodat deze stap niet klaagt system.serviceModel
over het gebruik van niet-ondersteunde bestanden. Deze stap wordt overgeslagen en de volgende stap wordt automatisch gestart.
[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:
De laatste stap voordat de upgrade van dit project is voltooid, is het bijwerken van verouderde codeverwijzingen. Op basis van het type project dat u wilt upgraden, wordt voor deze stap een lijst met bekende codecorrecties weergegeven. Sommige oplossingen zijn mogelijk niet van toepassing op uw project.
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
In dit geval zijn geen van de voorgestelde oplossingen van toepassing op het voorbeeldproject en wordt deze stap automatisch voltooid direct nadat de vorige stap is voltooid.
[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
De upgrade voltooien
Als er nog meer projecten moeten worden gemigreerd, kunt u met het hulpprogramma selecteren welk project u vervolgens wilt upgraden. Wanneer er geen projecten meer zijn om te upgraden, gaat u met het hulpprogramma naar de stap Upgrade voltooien:
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
In het ideale geval moeten deze wijzigingen na het uitvoeren van het hulpprogramma worden weergegeven in de oorspronkelijke bestanden.
In service.cs
het bestand is de using System.ServiceModel
code vervangen door verwijzingen naar CoreWCF. Het ServiceHost
exemplaar is ook verwijderd en de service wordt gehost op 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();
}
Voor de configuratiebestanden is de system.serviceModel
sectie verplaatst App.config
naar het nieuwe configuratiebestand wcf.config
, dat is gegenereerd tijdens de update.
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>
Ten slotte is in het projectbestand CalculatorService.csproj
de SDK bijgewerkt om ASP.NET Core-host- en CoreWCF-pakketverwijzingen in te Microsoft.NET.Sdk.Web
schakelen.
<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>
U ziet dat er in de CalculatorSample geen project-naar-project-afhankelijkheid is en dat het voorbeeld kan worden uitgevoerd nadat alleen de CalculatorService is bijgewerkt. Maar in andere gevallen met verschillende afhankelijkheden moet u mogelijk ook andere projecten in dezelfde oplossing bijwerken.
Na de upgrade
Nadat u uw projecten hebt bijgewerkt, moet u ze compileren en testen. De upgradeassistent doet wat het kan, maar kan niet elke incompatibiliteit oplossen als onderdeel van de projectupgrade. Het is bijvoorbeeld mogelijk dat de .NET Framework-versie van uw app bibliotheekverwijzingen bevat die uw project niet daadwerkelijk gebruikt. U moet elke verwijzing analyseren en bepalen of deze al dan niet vereist is. Het hulpprogramma heeft mogelijk ook een Verwijzing naar een NuGet-pakket toegevoegd of bijgewerkt naar een verkeerde versie.
Tips voor probleemoplossing
Er zijn verschillende bekende problemen die kunnen optreden bij het gebruik van de .NET-upgradeassistent. In sommige gevallen zijn deze problemen met het hulpprogramma try-convert dat de .NET Upgrade Assistant intern gebruikt.
De GitHub-opslagplaats van het hulpprogramma bevat meer tips voor probleemoplossing en bekende problemen.