Простой пример реализации WCF в .NET Core

  • Михаил
  • 8 мин. на прочтение
  • 326
  • 30 May 2024
  • 30 May 2024

.NET Core и WCF имеют довольно сложные взаимоотношения. Давайте подробнее рассмотрим, как можно использовать WCF в проектах на .NET Core.

1. Поддержка WCF в .NET Core:

  • Изначально в .NET Core не было полноценной поддержки WCF.
  • Начиная с .NET Core 3.0, Microsoft добавил базовую функциональность WCF, позволяющую создавать и использовать простые WCF-сервисы.
  • Однако функциональность WCF в .NET Core по-прежнему ограничена по сравнению с .NET Framework.

2. Использование WCF в .NET Core:

Для работы с WCF в .NET Core необходимо добавить соответствующие пакеты NuGet:

  • System.ServiceModel.Duplex
  • System.ServiceModel.Http
  • System.ServiceModel.NetTcp
  • System.ServiceModel.Security

Затем можно определять контракты сервисов, реализовывать их и настраивать сервис, используя WebHostBuilder и конфигурацию с IServiceCollection.

3. Ограничения и особенности:

  • Поддержка WCF в .NET Core ограничена и не имеет всех возможностей, доступных в .NET Framework.
  • Отсутствуют некоторые типы привязок, расширений и других компонентов WCF.
  • Для более сложных сценариев использования WCF лучше рассмотреть использование .NET Framework или сторонних библиотек, таких как ServiceModel.Primitive или CoreWCF.

4. Развертывание WCF-сервисов на Linux:

  • Благодаря .NET Core, WCF-сервисы можно развертывать на Linux-платформах, таких как Ubuntu или CentOS.
  • Однако для этого могут потребоваться дополнительные настройки и использование сторонних решений, как упоминалось ранее.

5. Альтернативы WCF в .NET Core:

  • Вместо WCF в .NET Core часто рекомендуется использовать ASP.NET Core Web API или другие современные подходы к построению микросервисной архитектуры, такие как gRPC.
  • Эти подходы лучше соответствуют парадигме .NET Core и обеспечивают больше возможностей для переносимости и масштабирования.

Резюмируя, можно сказать, что использование WCF в .NET Core является возможным, но требует дополнительных усилий, особенно для более сложных сценариев. Для многих современных приложений альтернативные подходы, такие как ASP.NET Core Web API или gRPC, могут быть более предпочтительными.

NET Core и WCF:

  • С выходом .NET Core 3.0 Microsoft добавил поддержку базовых WCF-функций.
  • Можно создавать WCF-сервисы с использованием .NET Core и развертывать их на Linux-серверах.
  • Однако функциональность WCF в .NET Core ограничена по сравнению с полноценным .NET Framework.

Вот пример реализации простого WCF-сервиса с использованием .NET Core:

1. Создайте новый проект .NET Core 3.1 Console Application.

2. Добавьте следующие пакеты NuGet в проект:
  - Microsoft.AspNetCore.Hosting
  - System.ServiceModel.Duplex
  - System.ServiceModel.Http
  - System.ServiceModel.NetTcp
  - System.ServiceModel.Security

3. Создайте контракт сервиса в файле ICalculatorService.cs:

[ServiceContract]
public interface ICalculatorService
{
   [OperationContract]
   int Add(int a, int b);
   [OperationContract]
   int Subtract(int a, int b);
}

4. Реализуйте сервис в файле CalculatorService.cs:

public class CalculatorService : ICalculatorService
{
   public int Add(int a, int b)
   {
       return a + b;
   }
   public int Subtract(int a, int b)
   {
       return a - b;
   }
}

5. Настройте и запустите сервис в файле Program.cs:

class Program
{
   static void Main(string[] args)
   {
       // Создаем и настраиваем хост сервиса
       var host = new WebHostBuilder()
           .UseKestrel()
           .UseStartup()
           .Build();
       // Запускаем сервис
       host.Run();
   }
}
public class Startup
{
   public void ConfigureServices(IServiceCollection services)
   {
       services.AddServiceModelServices();
       services.AddTransient();
   }
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
       app.UseServiceModel(builder =>
       {
           builder.AddService(options =>
           {
               options.BindTo(new Uri("net.tcp://localhost:8080/CalculatorService"));
           });
       });
   }
}

В этом примере мы:

  1. Определили контракт сервиса ICalculatorService.
  2. Реализовали сервис CalculatorService.
  3. Настроили и запустили сервис, используя ASP.NET Core WebHostBuilder.
  4. Сконфигурировали службы для использования WCF и зарегистрировали сервис CalculatorService.

Чтобы вызвать этот сервис из клиентского приложения, вы можете использовать следующий код:

var binding = new NetTcpBinding();
var channel = new ChannelFactory(binding).CreateChannel(
   new EndpointAddress("net.tcp://localhost:8080/CalculatorService"));
int result = channel.Add(5, 3);
Console.WriteLine($"5 + 3 = {result}");

Этот пример показывает, как можно использовать WCF-сервисы в приложениях, построенных на .NET Core. Конечно, это упрощенный пример, а в реальных приложениях могут потребоваться более сложные конфигурации и настройки.