在多个Web服务之间重用类型

时间:2019-05-24 15:02:00

标签: c# web-services webservice-client

我有一组相关的Web服务,它们之间共享某些类型,尤其是TokenService生成的“令牌”。

在Visual Studio中使用“添加引用”时,将为每个Web服务生成代理类,并复制许多类,例如Token类。

为解决此问题,我编写了以下powershell脚本来为可重复使用类型的Web服务生成.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

这将Web服务“链接”在一起,重新使用共享类,并且似乎正常工作。

此方法是否存在问题,并且/或者是否有更好的方法来实现相关Web服务之间的共享类?

编辑:请注意,这些不是我们开发的Web服务,我们无权访问服务器端使用的代码或类。

2 个答案:

答案 0 :(得分:1)

为什么没有创建一个用于在多个解决方案之间共享代码的类库项目?或者,您可以为所有微服务创建项目模板。 我认为您当前的方法是肮脏且不受支持的hack。

答案 1 :(得分:0)

我在回答中假设您正在询问Web服务是否可以共享对存储DLL(库)的单个路径的访问。

这是您可以在Windows中使用GAC(需要强命名程序集)执行的操作,以便多个应用程序可以轻松访问它。但是到目前为止,我不相信微服务架构可以提供类似的服务来做类似的事情。

因此,每个Web服务都需要它自己的DLL实例才能使用必需的内部代码。