我目前正在做一个项目,我们有一些WCF服务和一个REST API调用这些WCF服务。
更新方法签名时,其中一个服务中的DTO或枚举发生更改时,我们会更新服务引用以使REST API项目了解这些更改。我们目前使用Visual Studio 2019专业版通过“更新服务引用”按钮执行此操作。此按钮位于:
The project -> Service References -> Select all contracts -> Right click -> Update Service References.
这是一项手动任务,我们希望实现自动化,因为它非常耗时。
我在网上搜索了一下,找到了this和this,但没有什么令人信服的。
在执行手动任务时,我们最终得到以下结果:
Service References
├───ApcDossierContract
│ ApcDossierService.xsd
│ ApcDossierService1.disco
│ ApcDossierService1.wsdl
│ ApcDossierService1.xsd
│ ApcDossierService6.xsd
│ ApcDossierService61.xsd
│ ApcDossierService62.xsd
│ ApcDossierService63.xsd
│ ApcDossierService64.xsd
│ ApcDossierService65.xsd
│ configuration.svcinfo
│ configuration91.svcinfo
│ Reference.cs
│ Reference.svcmap
├───ClientContract
.
.
.
最重要的文件是Reference.cs,如下所示:
namespace DummyNamespace.Move.BackEnd.ApcDossierContract {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="ApcDossierContract.IApcDossierService")]
public interface IApcDossierService {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IPingService/HealthStatus", ReplyAction="http://tempuri.org/IPingService/HealthStatusResponse")]
DummyNamespace.Services.Common.ResultWcf<string[]> HealthStatus();
...
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IApcDossierServiceChannel : DummyNamespace.Move.BackEnd.ApcDossierContract.IApcDossierService, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class ApcDossierServiceClient : System.ServiceModel.ClientBase<DummyNamespace.Move.BackEnd.ApcDossierContract.IApcDossierService>, DummyNamespace.Move.BackEnd.ApcDossierContract.IApcDossierService {
public DummyNamespace.Services.Common.ResultWcf<string[]> HealthStatus() {
return base.Channel.HealthStatus();
}
...
}
}
当使用svcutil.exe(*C:\Program Files(x86)\Microsoft SDK\Windows\v10.0A\Bin\NETFX 4.8 Tools\svcutil.exe *)时,我无法获取所有的XSD、svcinfo和svcmap文件。Reference.cs要大得多,因为没有使用自定义类型,例如ResultWcf
。
我也尝试过使用新版本的svcutil(在这里)[https://github.com/dotnet/docs/blob/main/docs/core/additional-tools/dotnet-svcutil-guide.md],方法是:
dotnet tool install --global dotnet-svcutil
但结果是一样的。
如果有人已经创建了一个脚本来自动化这个任务,它将受到欢迎,感谢您的时间!
1条答案
按热度按时间shyt4zoc1#
Svcutil仍然需要更新wcf服务引用,自动化需要命令行或PowerShell。
您可以使用一些帮助命令
dotnet-svcutil --help
来获得帮助。如果您的项目文件不在同一个位置,请指定服务引用dotnet svcutil -u. \path\to\ServiceReference
的位置。最简单的方法是像dotnet-svcutil -u ServiceReference
这样更新它。