绑定到具有可选值类型的 SOAP 服务

2024-04-16

我有一个使用以下代码生成 SOAP 服务的方法WSDL:

<xs:complexType name="updateItem">
  <xs:sequence>
    <xs:element name="itemCode" type="xs:string" />
    <xs:element minOccurs="0" name="itemParentCode" type="xs:string" />
    <xs:element minOccurs="0" name="itemStatus" type="xs:string" />
    <xs:element minOccurs="0" name="isActive" type="xs:boolean" />
    <xs:element minOccurs="0" name="isPrimary" type="xs:boolean" />
  </xs:sequence>
</xs:complexType>

我正在连接到此服务并在 .NET Framework 4.7 桌面应用程序中使用 Visual Studio 生成客户端。

这会生成一个具有以下参数的方法:

public void updateItem(string itemCode, string itemParentCode, 
    string itemStatus, bool isActive, bool isPrimary)

根据服务定义,isActive and isPrimary是可选参数,但在生成的方法中它们是不可为 null 的值类型。

有没有办法生成客户端以允许这些是可选的,也许通过可为空的布尔值?


我终于找到了这个问题的答案,但确实感觉默认行为是一个错误。在生成的Reference.svcmap文档,您可以添加一个<Wrapped>true</Wrapped>来强制*Specified要显示的字段。您必须添加Wrapped在下面ClientOptions节点,像这样:

<ClientOptions>
    <Wrapped>true</Wrapped>
</ClientOptions>

现在重新生成客户端将强制使用消息契约对象,因此调用现在如下所示:

// Update an item
updateItem(new updateItem 
    { 
        itemCode = "testItem", 
        itemParentCode = "testParent", 
        itemStatus = "testStatus", 
        isActive = true, 
        isPrimary = true, 
        isActiveSpecified = true, 
        isPrimarySpecified = true 
    });

我很高兴找到了解决方案,但仍然认为这应该是生成消息契约以适应这种情况的默认方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定到具有可选值类型的 SOAP 服务 的相关文章

随机推荐