Delen via


Een WCF Server-side Project upgraden om CoreWCF te gebruiken op .NET 6

Belangrijk

Dit artikel is geschreven vóór de release van de upgradeassistent-extensie voor Visual Studio en maakt gebruik van het verouderde CLI-hulpprogramma. Zie De verouderde .NET-upgradeassistent gebruiken voor meer informatie.

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.

Zie De verouderde .NET-upgradeassistent gebruiken voor meer informatie over het installeren van het hulpprogramma.

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.

Voor een WCF-project dat van toepassing is op deze upgrade, moet het voldoen aan de volgende vereisten:

  1. Bevat een .cs-bestand dat verwijst naar System.ServiceModel en nieuw ServiceHostmaakt.

    Als het WCF-project meerdere ServiceHostheeft, moeten alle hosts in dezelfde methode worden gemaakt.

  2. 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.

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\t-simonaliao\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.serviceModelover 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.csprojde 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.

Zie ook