我們正在嘗試開發一種Web服務,它將取代我們的客戶端所使用的現有Web服務。這意味着來自WCF中新Web服務的SOAP響應必須與來自當前Web服務(這是使用Java編寫的傳統服務)的SOAP響應完全匹配。我們在使新服務返回與舊服務相同的SOAP響應方面遇到了麻煩。WCF服務的SOAP格式化
最初,我們開始使用DataContract作爲響應的結構,但是由於它產生了一些額外的標籤,我們切換到MessageContract。
以下是DataContAract作爲請求和響應屬性的示例請求和響應。我們面臨兩個問題與使用DataContract -
的響應,有兩個額外的標記
GetDataUsingDataContractReponse
,GetDataUsingDataContractResult
我們不能以編程方式刪除。我們無法獲得
BoolValue
屬性作爲XML屬性,而是顯示爲XML元素。
如果你能分享任何想法,你必須解決這兩個問題,我們將不勝感激。以下是使用DataContract
的示例請求和響應。
請求與DataContract DataContract-
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:mem="http://schemas.datacontract.org/2004/07/MemoPayment">
<soapenv:Header/>
<soapenv:Body>
<tem:GetDataUsingDataContract>
<!--Optional:-->
<tem:composite>
<mem:BoolValue>true</mem:BoolValue> <!--Not able to make this value as XML Attribute. Instead, always shows up as XML Element -->
<mem:StringValue>Sam</mem:StringValue>
</tem:composite>
</tem:GetDataUsingDataContract>
</soapenv:Body>
</soapenv:Envelope>
響應:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetDataUsingDataContractResponse xmlns="http://tempuri.org/">
<GetDataUsingDataContractResult xmlns:a="http://schemas.datacontract.org/2004/07/MemoPayment" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> à Extra tags showing up. Any way to remove them?
<a:BoolValue>true</a:BoolValue>
<a:StringValue>SamSuffix</a:StringValue>
</GetDataUsingDataContractResult>
</GetDataUsingDataContractResponse>
</s:Body>
</s:Envelope>
要對SOAP消息的更多控制,我們已經從DataContract
切換到MessageContract
現在響應正被呈現爲預期使用XML屬性和XML元素。
但是,使用MessageContract
的問題是所有XML元素都顯示爲可選。示例 - StringValue
在下面的請求中。再次,如果您能根據您的經驗提出任何解決方法,我們將不勝感激。
請求與MessageContract:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:MsgRequest boolVal="true">
<!--Optional:-->
<tem:StringValue>Sam</tem:StringValue> à Always showing up as Optional. Not able to control from the code. Any way to remove the Optional attribute?
</tem:MsgRequest>
</soapenv:Body>
</soapenv:Envelope>
與MessageContract響應:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MsgResponse boolVal="true" xmlns="http://tempuri.org/">
<StringValue>SamSuffix</StringValue>
</MsgResponse>
</s:Body>
</s:Envelope>