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

Dav*_*vid 7 .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" /> 
Run Code Online (Sandbox Code Playgroud)

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

有没有办法使用svcutil生成一个允许我这样做的代理?

(另一方面,我注意到,通过我的研究,其他人能够使用"添加服务引用"功能正确生成这些额外的"指定"字段,但无论出于何种原因,Visual Studio似乎不希望在生成代理之后我添加了参考(之后没有任何事情发生))

WSDL文件 生成的代理

使用的命令: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

mar*_*c_s 7

我猜测生成的客户端代理类svcutil有一个名为meetingIdtype 的字段/属性int- 对吗?是的,这是不可空的 - 但我敢打赌你也有一个名为的布尔字段/属性meetingIdSpecified- 只有这样设置为true服务实际上会看到它; 如果你没有设置它,那么服务将不会查看该值,因此它几乎就像在哪里一样NULL.

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

<xs:element minOccurs="0" maxOccurs="1" name="meetingId" type="xs:int" 
            nillable="true" />
Run Code Online (Sandbox Code Playgroud)

看到"可空"属性?这是用于使字段真正可以为空的那个 - 你现在可以在XML中有这样的条目:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <meetingId xsi:nil="true" />
</root>
Run Code Online (Sandbox Code Playgroud)