.net - svcutil.exe - 生成的代理不允许为空字段

标签 .net wcf wsdl nullable svcutil.exe

我试图通过使用 svcutil.exe 创建 WCF 代理来使用使用 WSDL 指定的 Web 服务,但 WSDL 指定某些操作具有可选参数 (minOccurs="0"),例如:

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" /> 

不幸的是,生成的代理不允许我不指定值(参数不可为空),并且没有“指定”字段作为调用的一部分来指示代理不应发送任何值。

有什么方法可以使用 svcutil 生成允许我执行此操作的代理吗?

(附带说明,我通过研究注意到其他人能够使用“添加服务引用”功能正确生成这些额外的“指定”字段,但无论出于何种原因,Visual Studio 似乎不想在之后生成代理我添加了引用(之后什么也没发生))

WSDL File
Generated Proxy

使用的命令:svcutil http://sas-int.elluminate.com/site/external/adapter/default/v1/webservice.wsdl/internal/n:*,Elluminate.WebService.WebServiceProxy/o:WebServiceProxy.cs/config:App.config/nologo

最佳答案

我猜 svcutil 生成的客户端代理类有一个名为 meetingId 的字段/属性类型 int - 对?是的,这是不可为空的 - 但我敢打赌你也有一个名为 meetingIdSpecified 的 bool 字段/属性- 仅当设置为 true 时服务是否真的会查看它;如果你不设置它,那么服务就不会看这个值,所以就好像它在哪里NULL .

此外 - 您也没有在 XSD 中将该字段指定为可为空 - 您将其指定为可选。要使其可为空,请在此处使用以下语法:

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" 
            nillable="true" />

看到“可为空”属性了吗?这是用于使字段真正可以为空的方法 - 您现在可以在 XML 中拥有这样的条目:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <meetingId xsi:nil="true" />
</root>

马克

关于.net - svcutil.exe - 生成的代理不允许为空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1009895/

相关文章:

wcf - 用于 REST WCF 的 WSDL

vb.net - 字符串中的反斜杠字符导致字符串在 WCF 中计算为 "nothing"

java - 策略异常 : None of the policy alternatives can be satisfied in WCF Service Call

java - CXF 服务调用失败,并出现意外 namespace 上的解码错误

c# - 为什么 List.Sort() 是实例方法而 Array.Sort() 是静态的?

时间:2019-03-17 标签:c#mergeobject

c# - 覆盖 DateTime.MinValue 导致问题

java - 如何以编程方式(!)使用 wsdl 验证 soap 请求/响应?

c# - .NET 图像压缩

c# - 带有数据网格和 TabControl 的 WPF MVVM Master 详细信息 View