首页 > 解决方案 > svcUtil 没有从 WSDL 生成相同的输出

问题描述

我正在尝试使用 svcutil 从 WSDL 文件为我的客户端生成客户端合同文件,该文件只有很小的更改(向可枚举值添加了值) - 我使用几个 DIFF 工具进行了检查。

但是生成的合同类是不同的——主要是旧合同类的输入输出为客户端的任务包装在“请求”和“响应”对象中,而现在输入和输出是“简单的”。

旧生成代码示例:

///attributes left out for brevity, they are the same in both
public interface IServiceWS
{

    ///left out for brevity, same in both
    Contracts.VyhledejVozidloIDResponse VyhledejVozidloID(Contracts.VyhledejVozidloIDRequest request);

而现在生成的代码是:

///attributes left out for brevity, they are the same in both
public interface IServiceWS
{
   ///left out for brevity, same in both
   Contracts.VozidloStructure[] VyhledejVozidloID(Contracts.UzivatelInfoStructure UzivatelInfo, int[] VozidloID);

以及生成合约的代码:

@set SVCUTIL="%WindowsSDK_ExecutablePath_x64%\SvcUtil.exe"
@set SERVICE=http://localhost/ServiceWS/ServiceWS.wsdl

%SVCUTIL% /namespace:*,Contracts /out:Contracts.cs ^
    %SERVICE%

我很确定生成旧合同的代码是相同的,但旧版本是两年前在具有较旧 .net 框架的较旧 Visual Studio 上生成的。

旧的Contracts.VyhledejVozidloIDResponse包含Contracts.VozidloStructure[].

Contracts.VyhledejVozidloIDRequest包装器对象包含现在展开的东西Contracts.UzivatelInfoStructure UzivatelInfoint[] VozidloID.

我应该改变什么才能让它以旧样式生成?

标签: c#wsdlsvcutil.exe

解决方案


最后我解决了我自己的问题。

在我终于在https://docs.microsoft.com/cs-cz/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe上找到了一些文档后,我的答案就显露出来了

它正在使用这个/wrapped论点。输出仍然不完全相同(因为它为很多东西生成了更多的包装类),但我可以解决它,与解决未包装的请求/响应参数不同,这需要我更改整个抽象客户端逻辑我们在我们的项目中有。


推荐阅读