Partilhar via


Atualizar um projeto do lado do servidor WCF para CoreWCF

O Assistente de Atualização do .NET é uma ferramenta de linha de comando que pode ajudar a atualizar um projeto existente do lado do servidor WCF no .NET Framework para usar os serviços CoreWCF no .NET 6. Este artigo fornece:

  • Coisas a saber antes de começar.
  • Uma demonstração de como executar a ferramenta em um projeto do lado do servidor WCF no .NET Framework.
  • Dicas de solução de problemas.

Coisas a saber antes de começar

Essa ferramenta atualmente oferece suporte a projetos C# e usa CoreWCF para portar projetos do lado do servidor WCF auto-hospedados para o .NET 6.

Importante

A atualização de projetos WCF requer uma versão herdada do .NET Upgrade Assistant e não é compatível com as versões mais recentes. As instruções sobre como instalar a versão herdada são fornecidas na seção Instalar a versão herdada.

Para que um projeto WCF seja aplicável a essa atualização, ele deve atender aos seguintes requisitos:

  1. Inclui um arquivo .cs que faz referência System.ServiceModel e cria novos ServiceHostarquivos .

    Se o projeto WCF tiver vários ServiceHost, todos os hosts precisam ser criados no mesmo método.

  2. Inclui um arquivo .config que armazena System.ServiceModel propriedades.

A versão atual da ferramenta não suporta projetos WCF hospedados por meio de arquivos .svc.

Nota

Se o seu projeto não for aplicável a esta ferramenta, recomendamos que você dê uma olhada no guia passo a passo do CoreWCF e na demonstração do BeanTrader Sample e atualize manualmente o projeto.

Pré-requisitos

Instalar a versão herdada

Use o comando para instalar a dotnet versão 0.4.421302 do .NET Upgrade Assistant.

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

Importante

Se você configurou fontes de feed NuGet extras, a instalação pode falhar com um erro indicando que o pacote NuGet não está disponível no feed. Use o --ignore-failed-sources parâmetro para tratar essas falhas como avisos em vez de erros, ignorando as outras fontes de feed do NuGet:

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

Aplicação de demonstração

Você pode usar o projeto Basic Calculator Sample para testar a atualização com o Assistente de Atualização, que também é a demonstração usada nesta documentação.

Se você quiser experimentar uma amostra mais complicada, veja a amostra BeanTrader criada por Mike Rousos.

Executar o assistente de atualização

Abra um terminal e navegue até a pasta onde o projeto ou solução de destino está localizado. Execute o upgrade-assistant upgrade comando, passando o nome do projeto ou solução que você está atualizando.

Quando um projeto é fornecido, o processo de atualização começa nesse projeto imediatamente. Se uma solução for fornecida, você selecionará qual projeto você normalmente executa, conhecido como o ponto de entrada de atualização. Com base nesse projeto, um gráfico de dependência é criado e uma sugestão sobre qual ordem você deve atualizar os projetos é fornecida.

upgrade-assistant upgrade .\CalculatorSample.sln

A ferramenta é executada e mostra uma lista das etapas que executará. À medida que cada etapa é concluída, a ferramenta fornece um conjunto de comandos que permitem ao usuário aplicar ou pular a próxima etapa ou alguma outra opção, como:

  • Obtenha mais informações sobre a etapa.
  • Alterar projetos.
  • Ajuste as configurações de registro.
  • Pare a atualização e saia.

Pressionar Enter sem escolher um número seleciona o primeiro item da lista.

À medida que cada etapa é inicializada, ele pode fornecer informações sobre o que ele acha que acontecerá se você aplicar a etapa.

Selecione o ponto de entrada e o projeto a ser atualizado

A primeira etapa para atualizar o Exemplo de Calculadora Básica é escolher qual projeto na solução serve como o projeto de ponto de entrada.

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

Escolha o comando 1 para iniciar essa etapa. Os resultados são exibidos:

[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

Há dois projetos listados. Como nossa ferramenta atualiza o projeto do lado do servidor, escolheremos o comando 2 para selecionar o projeto de serviço como o ponto de entrada.

Atualizar o projeto

Quando um projeto é selecionado, uma lista de etapas de atualização que a ferramenta executará é listada.

Importante

Com base no projeto que você está atualizando, você pode ou não ver todas as etapas listadas neste exemplo.

A saída a seguir descreve as etapas envolvidas na atualização do projeto:

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

Nota

Para o restante deste artigo, as etapas de atualização não são mostradas explicitamente, a menos que haja algo importante a ser chamado. Os resultados de cada etapa ainda são mostrados.

Criar uma cópia de segurança

Neste exemplo de atualização do projeto CalculatorService, você aplicará cada etapa. O primeiro passo, comando 1, é fazer backup do projeto:

[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

A ferramenta escolhe um caminho de backup padrão com o nome da pasta atual, mas com .backup anexado a ele. Você pode escolher um caminho personalizado como alternativa ao caminho padrão. Para cada projeto atualizado, a pasta do projeto é copiada para a pasta de backup. Neste exemplo, a CalculatorService pasta é copiada de CalculatorSample\CalculatorService para CalculatorSample.backup\CalculatorService durante a etapa de backup:

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

Atualizar o arquivo de projeto

O projeto é atualizado do formato de projeto .NET Framework para o formato de projeto .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

Preste atenção à saída de cada etapa. Observe que a saída de exemplo indica que você terá uma etapa manual a ser concluída após a atualização:

App.config é substituído por appsettings.json no .NET Core. Você precisará excluir App.config e migrar para appsettings.json se for aplicável ao seu projeto.

Neste exemplo, a etapa de atualização do WCF criará um novo wcf.config com base na system.serviceModel seção em App.config. Não precisaremos migrar para appsettings.json.

Limpar referências do NuGet

Depois que o formato do projeto for atualizado, a próxima etapa é limpar as referências do pacote NuGet.

Além dos pacotes referenciados pelo seu aplicativo, o arquivo packages.config contém referências às dependências desses pacotes. Por exemplo, se você adicionou referência ao pacote A que depende do pacote B, ambos os pacotes serão referenciados no arquivo packages.config . No novo sistema de projetos, apenas é necessária a referência ao pacote A . Esta etapa analisa as referências do pacote e remove aquelas que não são necessárias.

[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

Seu aplicativo ainda está fazendo referência a assemblies do .NET Framework. Alguns desses assemblies podem estar disponíveis como pacotes NuGet. Esta etapa analisa esses assemblies e faz referência ao pacote NuGet apropriado.

Neste exemplo, o atualizador de pacotes deteta o CalculatorService como um projeto somente de servidor e não há necessidade de adicionar System.ServiceModel pacotes. Embora tenham sido adicionados à lista com base na configuração de mapeamento de pacotes, essas etapas não foram aplicadas.

Manipular o TFM

Em seguida, a ferramenta altera o TFM do .NET Framework para o SDK sugerido. Neste exemplo, é 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

Atualizar pacotes NuGet

Em seguida, a ferramenta atualiza os pacotes NuGet do projeto para as versões que suportam o TFM atualizado, 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

Adicionar arquivos de modelo

Uma vez que os pacotes são atualizados, o próximo passo é atualizar todos os arquivos de modelo. Neste exemplo, não há arquivos de modelo que precisem ser atualizados ou adicionados ao projeto. Esta etapa é ignorada e a próxima etapa é iniciada automaticamente.

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

Atualizar o serviço WCF para CoreWCF (Visualização)

Nota: No momento em que esta documentação foi escrita, a extensão do atualizador WCF é fornecida como uma versão de visualização. Se você tiver algum comentário sobre a versão de visualização, abra um problema no repositório GitHub do Assistente de Atualização com area:WCF a tag .

O assistente de atualização primeiro inicializará a etapa do WCF Updater e verificará se o projeto é aplicável para a atualização do 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

A etapa verifica o arquivo de configuração, o código-fonte e o arquivo de projeto separadamente para decidir se o projeto é aplicável à atualização do WCF. Se o projeto não for aplicável (como não usar WCF ou não atender aos requisitos declarados no início do artigo), a mensagem de log descreverá qual arquivo não era aplicável e o que estava faltando. Em seguida, a etapa seria ignorada e a próxima etapa seria iniciada automaticamente.

Neste exemplo, CalculatorSample é aplicável para atualização do WCF e escolheremos o comando 1 para aplicar a etapa.

[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

Esta etapa cria as atualizações e as grava nos arquivos originais individualmente. Preste atenção à saída, que pode notificá-lo sobre a remoção de arquivos originais ou atualizações manuais para concluir após a atualização.

Atualização de arquivos de configuração e código

Essas etapas podem ser ignoradas automaticamente pela ferramenta se ela determinar que não há nada a fazer pelo seu projeto.

Após a conclusão da atualização do WCF, a próxima etapa é atualizar os arquivos de configuração do aplicativo. Neste exemplo, não há nada que precise ser atualizado nos arquivos de configuração do aplicativo. A etapa WCF já atualizou os arquivos de configuração para que esta etapa não reclame do uso de arquivos não suportados system.serviceModel. Esta etapa é ignorada e a próxima etapa é iniciada automaticamente.

[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 etapa final antes da atualização deste projeto ser concluída é atualizar quaisquer referências de código desatualizadas. Com base no tipo de projeto que você está atualizando, uma lista de correções de código conhecidas é exibida para esta etapa. Algumas das correções podem não se aplicar ao seu projeto.

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

Nesse caso, nenhuma das correções sugeridas se aplica ao projeto de exemplo, e essa etapa é concluída automaticamente imediatamente após a conclusão da etapa anterior.

[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

Concluindo a atualização

Se houver mais projetos para migrar, a ferramenta permite que você selecione qual projeto atualizar em seguida. Quando não há mais projetos para atualizar, a ferramenta leva você para a etapa "Finalizar atualização":

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

Idealmente, depois de executar com sucesso a ferramenta, essas alterações devem aparecer nos arquivos originais.

No service.cs arquivo, o using System.ServiceModel foi substituído por referências ao CoreWCF. A ServiceHost instância também foi removida e o serviço foi hospedado no 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();
    }

Para os arquivos de configuração, a system.serviceModel seção in App.config foi movida para o novo arquivo de wcf.configconfiguração , que foi gerado durante a atualização.

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>

Por fim, no arquivo de projeto, CalculatorService.csprojo SDK foi atualizado para Microsoft.NET.Sdk.Web habilitar ASP.NET host Core e as referências de pacote CoreWCF foram adicionadas.

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

Observe que no CalculatorSample, não há uma dependência de projeto para projeto e o exemplo pode ser executado com êxito depois de atualizar apenas o CalculatorService. Mas em outros casos com dependências diferentes, talvez seja necessário atualizar outros projetos na mesma solução também.

Após a atualização

Depois de atualizar seus projetos, você precisará compilá-los e testá-los. O assistente de atualização fará o que puder, mas não poderá resolver todas as incompatibilidades como parte da atualização do projeto. Por exemplo, é possível que a versão do .NET Framework do seu aplicativo contenha referências de biblioteca que seu projeto não está realmente usando. Você precisará analisar cada referência e determinar se ela é necessária ou não. A ferramenta também pode ter adicionado ou atualizado uma referência de pacote NuGet para a versão errada.

Sugestões de resolução de problemas

Há vários problemas conhecidos que podem ocorrer ao usar o Assistente de atualização do .NET. Em alguns casos, esses problemas são com a ferramenta try-convert que o Assistente de atualização do .NET usa internamente.

O repositório GitHub da ferramenta tem mais dicas de solução de problemas e problemas conhecidos.

Consulte também