Visual Studio WCF -从CLI更新服务引用

brvekthn  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(171)

我目前正在做一个项目,我们有一些WCF服务和一个REST API调用这些WCF服务。
更新方法签名时,其中一个服务中的DTO或枚举发生更改时,我们会更新服务引用以使REST API项目了解这些更改。我们目前使用Visual Studio 2019专业版通过“更新服务引用”按钮执行此操作。此按钮位于:

The project -> Service References -> Select all contracts -> Right click -> Update Service References.

这是一项手动任务,我们希望实现自动化,因为它非常耗时。
我在网上搜索了一下,找到了thisthis,但没有什么令人信服的。
在执行手动任务时,我们最终得到以下结果:

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

但结果是一样的。
如果有人已经创建了一个脚本来自动化这个任务,它将受到欢迎,感谢您的时间!

shyt4zoc

shyt4zoc1#

Svcutil仍然需要更新wcf服务引用,自动化需要命令行或PowerShell。
您可以使用一些帮助命令dotnet-svcutil --help来获得帮助。如果您的项目文件不在同一个位置,请指定服务引用dotnet svcutil -u. \path\to\ServiceReference的位置。最简单的方法是像dotnet-svcutil -u ServiceReference这样更新它。

相关问题