dotNetCore. Конфликт библиотек System.ServiceModel.Primitives и Terrasoft.ServiceModel.Primitives

Реализую интеграцию по протоколу Soap.

dotnet-svcutil на основании wsdl сформировал proxy-класс.

ряд элементов proxy-класс ссылаются на  компоненты библиотеки System.ServiceModel.Primitives.dll, которой нет в dotnetcore приложении.

Пример ошибки:  

error CS0246: The type or namespace name 'IsWrapped' could not be found (are you missing a using directive or an assembly reference?)



После импорта System.ServiceModel.Primitives.dll при компиляции появляется ошибка вида:

 

​​​​​​​error CS0433: The type 'ServiceContractAttribute' exists in both 'System.ServiceModel.Primitives, Version=4.2.0.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 'Terrasoft.ServiceModel.Primitives, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edaadfbc3b0bb879' [w:\BPMOnline\www\rzd_core\Terrasoft.Configuration\Terrasoft.Configuration.Dev.csproj]



В  приложении на dotNetframework ошибка не повторяется.

​​​​​​​Дополнительно проанализировал структуру проекта на dotNetFramework и выявил, что TERRASOFT.SERVICEMODEL.PRIMITIVES на данной платформе отсутствует (используется аналог Terrasoft.Services), а System.ServiceModel.Primitives наоборот присутствует.

Каким образом мне портировать библиотеку System.ServiceModel.Primitives.dll без конфликта с классами ядра creatio?

Нравится

1 комментарий

Добрый день. 



WCF является технологией которая встроена в .net Framework. Наше приложение на .net Framework использовало технологию  WCF для доступа к конфигурационным сервисам. В тот момент когда мы переводили наш продукт на .net Core в нем WCF не было. По этому нам пришлось написать собственную абстракцию Terrasoft.ServiceModel.Primitives, которая дала бы возможность минимально переделать код конфигурации, как собственный, так и клиентов, чтобы он заработал в .net Core. Наша конфигурация и кастомизации наших клиентов использовали огромное количество using System.ServiceModel и имен классов из этого пространства имен. Чтобы наши пакеты, и самое важное, пакеты партнеров и клиентов были максимально легко адаптированными к .net Core, Terrasoft.ServiceModel.Primitives содержит тоже пространство имен и те же имена классов(но не всех), что и  System.ServiceModel.Primitives. Поэтому Terrasoft.ServiceModel.Primitives не совместима с System.ServiceModel.Primitives и Вам не удастся использовать ее в нашем приложении на .net Core.

 

Не было цели в  Terrasoft.ServiceModel.Primitives, поместить все классы из System.ServiceModel.Primitives, туда были помещены, только те которые использовались в конфигурации и то не все. У Вас прокси класс работать не будет, т.к. наше приложение на .net Core WCF не поддерживает. 

 

Рекомендуем Вам использовать наши сервисы, которые REST ориентированные, без WCF. 

Показать все комментарии