c# - 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 UzivatelInfo
和int[] VozidloID
.
我应该改变什么才能让它以旧样式生成?
解决方案
最后我解决了我自己的问题。
在我终于在https://docs.microsoft.com/cs-cz/dotnet/framework/wcf/servicemodel-metadata-utility-tool-svcutil-exe上找到了一些文档后,我的答案就显露出来了
它正在使用这个/wrapped
论点。输出仍然不完全相同(因为它为很多东西生成了更多的包装类),但我可以解决它,与解决未包装的请求/响应参数不同,这需要我更改整个抽象客户端逻辑我们在我们的项目中有。
推荐阅读
- mysql - 在 NodeJS 中调用 MySQL 存储过程,但在 Result number 字段值未正确舍入(Workbench 和 MySQL 控制台中的 Workig 正确)
- postgresql - 通过Postgresql查询在Object的嵌套数组中插入UUID类型的元素
- joomla - Joomla 客户端向控制器发送多个请求
- javascript - 通过比较对象值动态数组中的对象键生成新的对象数组
- powerbi - 如何在 Power Apps 中设置必填字段
- linux - 调整 EXT4 分区的大小
- machine-learning - 有没有办法在单列中标记编码逗号分隔值..?
- android - 如何在 Google Play 商店中修复“违反家庭政策要求”
- firebase - 在 Firebase 控制台上检测帐户禁用
- apache-kafka - Kafka - max.in.flight.requests.per.connection 是每个生产者还是会话?