Bagikan melalui


Meningkatkan Proyek sisi Server WCF ke CoreWCF

Asisten Peningkatan .NET adalah alat baris perintah yang dapat membantu meningkatkan proyek sisi WCF Server yang ada di .NET Framework untuk menggunakan layanan CoreWCF pada .NET 6. Artikel ini menyediakan:

  • Hal-hal yang perlu diketahui sebelum memulai.
  • Demonstrasi tentang cara menjalankan alat terhadap proyek sisi WCF Server pada .NET Framework.
  • Tips pemecahan masalah.

Hal-hal yang perlu diketahui sebelum memulai

Alat ini saat ini mendukung proyek C# dan menggunakan CoreWCF untuk memindahkan proyek sisi WCF Server yang dihost sendiri ke .NET 6.

Penting

Meningkatkan proyek WCF memerlukan versi warisan Asisten Peningkatan .NET dan tidak kompatibel dengan versi terbaru. Petunjuk tentang cara menginstal versi warisan disediakan di bagian Instal versi warisan.

Agar proyek WCF berlaku untuk peningkatan ini, proyek harus memenuhi persyaratan berikut:

  1. Menyertakan file .cs yang mereferensikan System.ServiceModel dan membuat baru ServiceHost.

    Jika proyek WCF memiliki beberapa ServiceHost, semua host perlu dibuat dalam metode yang sama.

  2. Menyertakan file .config yang menyimpan System.ServiceModel properti.

Versi alat saat ini tidak mendukung proyek WCF yang dihosting melalui file .svc.

Catatan

Jika proyek Anda tidak berlaku untuk alat ini, kami sarankan Anda melihat panduan penelusuran CoreWCF dan demo Sampel BeanTrader dan memperbarui proyek secara manual.

Prasyarat

Menginstal versi warisan

dotnet Gunakan perintah untuk menginstal versi 0.4.421302 .NET Upgrade Assistant.

dotnet tool install upgrade-assistant -g --version 0.4.421302

Penting

Jika Anda mengonfigurasi sumber umpan NuGet tambahan, penginstalan mungkin gagal dengan kesalahan yang menunjukkan bahwa paket NuGet tidak tersedia di umpan. Gunakan parameter untuk memperlakukan kegagalan tersebut --ignore-failed-sources sebagai peringatan alih-alih kesalahan, melewati sumber umpan NuGet lainnya:

dotnet tool install upgrade-assistant -g --ignore-failed-sources --version 0.4.421302

Aplikasi demo

Anda dapat menggunakan proyek Sampel Kalkulator Dasar untuk menguji peningkatan dengan Asisten Peningkatan, yang juga merupakan demo yang digunakan dalam dokumentasi ini.

Jika Anda ingin mencoba sampel yang lebih rumit, lihat sampel BeanTrader yang dibuat oleh Mike Rousos.

Jalankan asisten peningkatan

Buka terminal dan navigasikan ke folder tempat proyek atau solusi target berada. Jalankan upgrade-assistant upgrade perintah , meneruskan nama proyek atau solusi yang Anda tingkatkan.

Ketika proyek disediakan, proses peningkatan segera dimulai pada proyek tersebut. Jika solusi disediakan, Anda akan memilih proyek mana yang biasanya Anda jalankan, yang dikenal sebagai titik entri peningkatan. Berdasarkan proyek tersebut, grafik dependensi dibuat dan saran tentang urutan mana Anda harus meningkatkan proyek disediakan.

upgrade-assistant upgrade .\CalculatorSample.sln

Alat ini berjalan dan menunjukkan kepada Anda daftar langkah-langkah yang akan dilakukannya. Saat setiap langkah selesai, alat ini menyediakan sekumpulan perintah yang memungkinkan pengguna untuk menerapkan atau melewati langkah berikutnya atau beberapa opsi lain seperti:

  • Dapatkan informasi selengkapnya tentang langkah tersebut.
  • Mengubah proyek.
  • Sesuaikan pengaturan pengelogan.
  • Hentikan peningkatan dan keluar.

Menekan Enter tanpa memilih angka akan memilih item pertama dalam daftar.

Saat setiap langkah diinisialisasi, ini dapat memberikan informasi tentang apa yang menurutnya akan terjadi jika Anda menerapkan langkah tersebut.

Pilih titik masuk dan proyek yang akan ditingkatkan

Langkah pertama dalam meningkatkan Sampel Kalkulator Dasar adalah memilih proyek mana dalam solusi yang berfungsi sebagai proyek titik masuk.

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

Pilih perintah 1 untuk memulai langkah tersebut. Hasilnya ditampilkan:

[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

Ada dua proyek yang tercantum. Karena alat kami meningkatkan proyek sisi server, kami akan memilih perintah 2 untuk memilih proyek layanan sebagai titik masuk.

Meningkatkan proyek

Setelah proyek dipilih, daftar langkah-langkah peningkatan yang akan diambil alat akan dicantumkan.

Penting

Berdasarkan proyek yang Anda tingkatkan, Anda mungkin atau mungkin tidak melihat setiap langkah yang tercantum dalam contoh ini.

Output berikut menjelaskan langkah-langkah yang terlibat dalam meningkatkan proyek:

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

Catatan

Untuk sisa artikel ini, langkah-langkah peningkatan tidak ditampilkan secara eksplisit kecuali ada sesuatu yang penting untuk dipanggil. Hasil setiap langkah masih ditampilkan.

Membuat cadangan

Dalam contoh peningkatan proyek CalculatorService ini, Anda akan menerapkan setiap langkah. Langkah pertama, perintah 1, adalah mencadangkan proyek:

[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

Alat ini memilih jalur cadangan default yang dinamai sesuai folder saat ini, tetapi dengan .backup ditambahkan ke folder tersebut. Anda dapat memilih jalur kustom sebagai alternatif untuk jalur default. Untuk setiap proyek yang ditingkatkan, folder proyek disalin ke folder cadangan. Dalam contoh ini, CalculatorService folder disalin dari CalculatorSample\CalculatorService ke CalculatorSample.backup\CalculatorService selama langkah pencadangan:

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

Meningkatkan file proyek

Proyek ini ditingkatkan dari format proyek .NET Framework ke format proyek .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

Perhatikan output dari setiap langkah. Perhatikan bahwa contoh output menunjukkan bahwa Anda akan memiliki langkah manual untuk diselesaikan setelah peningkatan:

App.config digantikan oleh appsettings.json di .NET Core. Anda harus menghapus App.config dan bermigrasi ke appsettings.json jika berlaku untuk proyek Anda.

Dalam sampel ini, langkah pembaruan WCF akan membuat wcf.config baru berdasarkan system.serviceModel bagian di App.config. Kita tidak perlu bermigrasi ke appsettings.json.

Membersihkan referensi NuGet

Setelah format proyek diperbarui, langkah selanjutnya adalah membersihkan referensi paket NuGet.

Selain paket yang dirujuk oleh aplikasi Anda, file packages.config berisi referensi ke dependensi paket tersebut. Misalnya, jika Anda menambahkan referensi ke paket A yang bergantung pada paket B, kedua paket akan dirujuk dalam file packages.config . Dalam sistem proyek baru, hanya referensi ke paket A yang diperlukan. Langkah ini menganalisis referensi paket dan menghapus referensi yang tidak diperlukan.

[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

Aplikasi Anda masih mereferensikan rakitan .NET Framework. Beberapa rakitan tersebut mungkin tersedia sebagai paket NuGet. Langkah ini menganalisis rakitan tersebut dan mereferensikan paket NuGet yang sesuai.

Dalam contoh ini, pembaruan paket mendeteksi CalculatorService sebagai proyek khusus server dan tidak perlu menambahkan System.ServiceModel paket. Meskipun ditambahkan ke daftar berdasarkan konfigurasi pemetaan paket, langkah-langkah tersebut tidak diterapkan.

Menangani TFM

Alat selanjutnya mengubah TFM dari .NET Framework ke SDK yang disarankan. Contohnya, 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

Meningkatkan paket NuGet

Selanjutnya, alat ini memperbarui paket NuGet proyek ke versi yang mendukung TFM yang diperbarui, 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

Menambahkan file templat

Setelah paket diperbarui, langkah selanjutnya adalah memperbarui file templat apa pun. Dalam contoh ini, tidak ada file templat yang perlu diperbarui atau ditambahkan ke proyek. Langkah ini dilewati dan langkah berikutnya dimulai secara otomatis.

[10:26:20 INF] Initializing upgrade step Add template files
[10:26:20 INF] 0 expected template items needed

Memperbarui layanan WCF ke CoreWCF (Pratinjau)

Catatan: Pada saat dokumentasi ini ditulis, ekstensi pembaruan WCF disediakan sebagai rilis Pratinjau. Jika Anda memiliki umpan balik untuk versi Pratinjau, buka masalah di repositori GitHub Asisten Peningkatan dengan area:WCF tag.

Asisten peningkatan pertama-tama akan menginisialisasi langkah WCF Updater dan memeriksa apakah proyek berlaku untuk pembaruan 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

Langkah ini memeriksa file konfigurasi, kode sumber, dan file proyek secara terpisah untuk memutuskan apakah proyek berlaku untuk pembaruan WCF. Jika proyek tidak berlaku (seperti tidak menggunakan WCF, atau tidak memenuhi persyaratan yang dinyatakan di awal artikel), pesan pengelogan akan menjelaskan file mana yang tidak berlaku dan apa yang hilang. Kemudian, langkah tersebut akan dilewati dan langkah berikutnya akan dimulai secara otomatis.

Dalam sampel ini, CalculatorSample berlaku untuk pembaruan WCF, dan kami akan memilih perintah 1 untuk menerapkan langkah.

[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

Langkah ini membuat pembaruan dan menulisnya ke dalam file asli satu per satu. Perhatikan output, yang mungkin memberi tahu Anda tentang penghapusan dari file asli atau pembaruan manual untuk diselesaikan setelah peningkatan.

Konfigurasi dan pembaruan file kode

Langkah-langkah ini dapat dilewati secara otomatis oleh alat jika alat menentukan tidak ada yang harus dilakukan untuk proyek Anda.

Setelah pembaruan WCF selesai, langkah selanjutnya adalah memperbarui file konfigurasi aplikasi. Dalam contoh ini, tidak ada yang perlu ditingkatkan dalam file konfigurasi aplikasi. Langkah WCF sudah memperbarui file konfigurasi sehingga langkah ini tidak akan mengeluh tentang penggunaan yang tidak didukung system.serviceModel. Langkah ini dilewati dan langkah berikutnya dimulai secara otomatis.

[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:

Langkah terakhir sebelum peningkatan proyek ini selesai, adalah memperbarui referensi kode yang kedaluarsa. Berdasarkan jenis proyek yang Anda tingkatkan, daftar perbaikan kode yang diketahui ditampilkan untuk langkah ini. Beberapa perbaikan mungkin tidak berlaku untuk proyek Anda.

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

Dalam hal ini, tidak ada perbaikan yang disarankan yang berlaku untuk proyek contoh, dan langkah ini secara otomatis selesai segera setelah langkah sebelumnya selesai.

[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

Menyelesaikan peningkatan

Jika ada lebih banyak proyek untuk dimigrasikan, alat ini memungkinkan Anda memilih proyek mana yang akan ditingkatkan berikutnya. Ketika tidak ada lagi proyek untuk ditingkatkan, alat ini membawa Anda ke langkah "Finalisasi peningkatan":

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

Idealnya, setelah berhasil menjalankan alat, perubahan ini akan muncul di file asli.

Dalam service.cs file, using System.ServiceModel diganti dengan referensi ke CoreWCF. ServiceHost Instans juga dihapus dan layanan dihosting di 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();
    }

Untuk file konfigurasi, bagian system.serviceModel di App.config dipindahkan ke file wcf.configkonfigurasi baru , yang dihasilkan selama pembaruan.

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>

Terakhir, dalam file proyek, CalculatorService.csproj, SDK diperbarui untuk Microsoft.NET.Sdk.Web mengaktifkan host inti ASP.NET dan referensi paket CoreWCF ditambahkan.

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

Perhatikan bahwa dalam KalkulatorSample, tidak ada dependensi proyek-ke-proyek dan sampel dapat berjalan dengan sukses setelah hanya memperbarui KalkulatorService. Tetapi dalam kasus lain dengan dependensi yang berbeda, Anda mungkin perlu memperbarui proyek lain dalam solusi yang sama juga.

Setelah memutakhirkan

Setelah meningkatkan proyek, Anda harus mengkompilasi dan mengujinya. Asisten peningkatan akan melakukan apa yang bisa dilakukan, tetapi tidak dapat menyelesaikan setiap ketidaksesuaian sebagai bagian dari peningkatan proyek. Misalnya, ada kemungkinan bahwa versi .NET Framework aplikasi Anda berisi referensi pustaka yang sebenarnya tidak digunakan proyek Anda. Anda harus menganalisis setiap referensi dan menentukan apakah diperlukan atau tidak. Alat ini mungkin juga telah menambahkan atau meningkatkan referensi paket NuGet ke versi yang salah.

Kiat pemecahan masalah

Ada beberapa masalah umum yang dapat terjadi saat menggunakan Asisten Peningkatan .NET. Dalam beberapa kasus, masalah ini adalah dengan alat coba-konversi yang digunakan Asisten Peningkatan .NET secara internal.

Repositori GitHub alat memiliki lebih banyak kiat pemecahan masalah dan masalah umum.

Lihat juga