WCF для реального мира, а не Hello World – переосмысление в среде .NET Core
Живите с WCF в ландшафте .NET Core
Фон
WCF для реального мира, а не приветственного – статья, опубликованная в 2012 году. На основе исходного кода статьи из данного репозитория GitHub можно создать проект для .NET Framework 4.8, а также некоторые примеры для .NET Core.
Введение
Согласно статье “Поддержка клиента для вызова WCF/CoreWCF с использованием System.ServiceModel 6.0 уже здесь!”, у Microsoft нет обязательств по полной поддержке WCF, но:
- Быстрая, хоть и не слишком чистая реализация библиотек клиента WCF, включая несколько пакетов NuGet
- Сообщественный проект CoreWCF
Пример клиента .NET Core для WCF
Пожалуйста, обратите внимание на следующие проекты csproj:
- RealWorldServiceCoreClientApi.csproj
- TestRealWorldCoreIntegration.csproj
Однако, в отличие от аналога для .NET Framework, файл app.config больше не используется, и этот файл конфигурации может вызвать сбой в xUnit VS Runner. Поэтому я жестко закодировал привязку и адрес для System.ServiceModel.ClientBase
. Тем не менее, в реальном приложении создание конфигурации на основе json в файле appSettings.json и использование кодов приложений для создания соответствующих привязок не должно вызвать проблем.
Точки интереса
ClientBase(string endpointConfigurationName)
Поскольку файл app.config больше не используется в .NET Core, эта конструкция лишь прототип функции-зомби, которую вы действительно не можете использовать в своем приложении-клиенте .NET Core. Похоже, Microsoft начинает убирать зомби, судя по вопросу #5358.
Добрые старые времена с WCF
Мне ностальгично за добрыми старыми временами с WCF. Микросервисы были модными уже более 15 лет. Однако, по сути, я создавал микросервисы неявно, разрабатывая службы WCF:
- Как разработчик, я создавал библиотеки служб WCF.
- После выпуска, IT-специалисты решали, как их развернуть путем настройки файла конфигурации app.config:
- Различные комбинации библиотек служб на разных хостах
- Различные привязки
- Различная безопасность
- Версионирование
- …
Выполнение связанное с работой “Службы .NET Framework / активацию XXX” будет обрабатываться .NET Framework Runtime во время выполнения. Кроме того, .NET Runtime может генерировать прямой, только вперед XML-парсер/писатель без кэша для обработки потоков SOAP.
В комплексной корпоративной среде у вас может быть установлен BizTalk, в котором компоненты WCF являются гражданами первого класса.
Однако, всё движется дальше по множеству причин, как хороших, так и плохих. Работа по созданию новых служб WCF непременно уменьшается, хотя уже существующие службы WCF, такие как PPSR и eRx, всё еще успешно поддерживаются многие годы, и появляются новые клиентские бизнес-приложения, которые взаимодействуют с этими службами SOAP.
Дефект в клиенте WCF остается
Пожалуйста, проверьте:
- Enforce Proper Disposal of WCF Channels against a WCF Defect
- Proper Disposal of WCF Channels against a WCF Defect. Follow up
- WCF for the Real World, Not Hello World, Part II
Согласно вопросу #4912, данный дефект пока еще не исправлен, поэтому вам может понадобиться обходное решение, которое я предложил еще в 2011 году.
История
- 21 ноября 2023 года: Первая версия
Leave a Reply