[英]How can BizTalk 2006 R2 consume the serialized response of a WCF service with PreserveObjectReferences = true?
我們有一個現有的.net 3.5 WCF服務,該服務在服務器端將PreserveObjectReferences設置為true。
當PreserveObjectReferences設置為false時,BizTalk可以使用響應。
有沒有辦法讓BizTalk消耗PreserveObjectReferences響應有效負載...
PreserveObjectReferences自身以在對象的第一個實例中出現的az:id和在隨后出現的任何對象中出現的az:ref來表示:
<b:xyz *z:Id="5"* i:type="abc">...</b:xyz>
...
<b:xyz *z:ref="5"* />
生成xsd時,將PreserveObjectReferences選項配置為什么?
xsd是從WCF服務的WSDL中生成的,如果在此WSDL中未定義這些額外的屬性,BizTalk將不知道它們的存在,並且BizTalk將引發異常。 我不確定在生成WSDL時DataContractSerializer是否包含這些屬性。 如果在生成WSDL時DataContractSerializer不包含這些屬性,則必須更改響應消息的xsd以允許在添加了這些屬性的元素上使用xs:any屬性。
由於不同的原因,BizTalk和JAX-B都在處理有效負載方面存在問題。 ID / IDREF是受支持的XML Schema選項,但是每個實現似乎在使用它們時都會遇到問題。
對於JAX-B,當同時指定了idref和nil = true時,它無法將有效載荷編組為對象:
<b:xyz z:ref="5" nil="true" />
刪除nil = true或將保留的對象引用設置為false(即,不使用idref功能返回有效載荷意味着Java編碼人員可以解決此問題。
BizTalk可以解決此問題,方法是通過xslt轉換或其他方式重新補充不帶idref支持的xml。
我們對兩者的解決方案都是確保保留對象引用已關閉。 這樣,兩個系統都可以輕松集成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.