我试图通过使用 svcutil.exe 创建 WCF 代理来使用使用 WSDL 指定的 Web 服务,但 WSDL 指定某些操作具有可选参数 (minOccurs="0"),例如:
<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" />
不幸的是,生成的代理不允许我不指定值(参数不可为空),并且没有“指定”字段作为调用的一部分来指示代理不应发送任何值。
有什么方法可以使用 svcutil 生成允许我执行此操作的代理吗?
(顺便说一句,我通过研究注意到其他人能够使用“添加服务引用”功能正确生成这些额外的“指定”字段,但无论出于何种原因,Visual Studio 似乎不想在之后生成代理我添加了引用(之后什么也没有发生))
WSDL文件
生成的代理
使用的命令:svcutilhttp://sas-int.elluminate.com/site/external/adapter/default/v1/webservice.wsdl/内部 /n:*,Elluminate.WebService.WebServiceProxy /o:WebServiceProxy.cs /config:App.config /nologo
我猜想生成的客户端代理类svcutil
有一个名为的字段/属性meetingId
类型的int
- 正确的?是的,这是不可为空的 - 但我打赌你还有一个名为的布尔字段/属性meetingIdSpecified
- 仅当设置为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>
Marc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)