2017-08-17 64 views
1

我有具有以下WSDL產生一個SOAP服務的方法:綁定到SOAP服務可選的值類型

<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> 

我連接到該服務並使用Visual Studio生成客戶端的.NET Framework 4.7桌面應用程序。

由此,生成與方法以下參數:

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

根據服務定義,isActiveisPrimary是可選的參數,但是在生成的方法它們是非空值類型。

有沒有一種方法來生成客戶端,以允許這些可選,也許通過可空布爾值?

回答

0

我終於找到了這個問題的答案,但它確實覺得默認行爲是一個錯誤。在生成的Reference.svcmap文檔中,您可以添加<Wrapped>true</Wrapped>以強制顯示*Specified字段。您必須添加WrappedClientOptions節點下,像這樣:

<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 
    }); 

我解除了解決方案,但仍然認爲這應該是生成消息合約的默認方式以適應這種情況。