Повторное использование типов в нескольких веб-сервисах - PullRequest
8 голосов
/ 24 мая 2019

У меня есть коллекция связанных веб-сервисов, которые разделяют некоторые типы между ними, в частности, «токен», сгенерированный TokenService.

При использовании «добавить ссылку» в Visual Studio создаются прокси-классы, и многие классы, такие как класс Token, дублируются для каждого веб-сервиса.

Чтобы решить эту проблему, я написал следующий скрипт powershell для генерации файлов .cs для веб-сервисов, которые повторно используют типы.

$svcutil = get-item ((get-item 'Env:\ProgramFiles(x86)').Value + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\svcutil.exe")
$csc = "C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe"

& $svcutil "http://Path/to/WebService/WSTokenService?wsdl" /o:WSTokenService.cs
& $csc /target:library /out:temp.dll WSTokenService.cs

& $svcutil "http://Path/to/WebService/WSAssetService?wsdl" /r:temp.dll /o:WSAssetService.cs
& $csc /target:library /out:temp.dll WSTokenService.cs WSAssetService.cs 

& $svcutil "http://Path/to/WebService/WSContactService?wsdl" /r:temp.dll /o:WSContactService.cs
& $csc /target:library /out:temp.dll WSTokenService.cs WSAssetService.cs WSContactService.cs
..
repeat for 8 webservices

Это «цепляет» веб-сервисы вместе, повторно используя общие классы, и кажется работающим.

Есть ли какие-либо проблемы с этим подходом и / или есть ли лучший способ обеспечить совместное использование классов между соответствующими веб-сервисами?

Изменить: обратите внимание, что это не веб-сервисы, разработанные нами, и у нас нет доступа к коду или классам, которые используются на стороне сервера.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Почему вы не создали один проект библиотеки классов для совместного использования кода несколькими решениями? Или вы можете создать шаблон проекта для всех ваших микросервисов. Я думаю, ваш текущий метод - грязный и неподдерживаемый хак.

0 голосов
/ 30 мая 2019

В моем ответе я предполагаю, что вы спрашиваете, могут ли веб-службы предоставить общий доступ к одному пути, в котором хранится DLL (библиотека).

Это то, что вы можете сделать в Windows.использование GAC (требует строго именованных сборок), чтобы несколько приложений имели к нему легкий доступ.Но на сегодняшний день я не верю, что существует аналогичный сервис, доступный для архитектуры микросервисов, чтобы сделать что-то подобное.

Таким образом, для каждого веб-сервиса требуется свой собственный экземпляр DLL для использования необходимого внутреннего кода.

...