2009-08-10 9 views
0

Wir haben einen vorhandenen .net 3.5 WCF-Dienst, bei dem PreserveObjectReferences serverseitig auf true festgelegt ist.Wie kann BizTalk 2006 R2 die serialisierte Antwort eines WCF-Dienstes mit PreserveObjectReferences = true konsumieren?

Wenn PreserveObjectReferences auf false BizTalk gesetzt wird, um die Reaktion konsumieren.

Gibt es eine Möglichkeit BizTalk zu bekommen die PreserveObjectReferences Nutzlasten Antwort auf verbrauchen ...

PreserveObjectReferences manifestiert sich mit az: id für die erste Instanz eines Objekts und az auftritt: ref für nachfolgende Objekt Ereignisse auftreten:

<b:xyz *z:Id="5"* i:type="abc">...</b:xyz> 
... 
<b:xyz *z:ref="5"* /> 
+0

Und was passiert? Was läuft schief? Es ist schließlich gültig xml (wenn auch nicht nur der Standard "Baum"). Also was bricht? –

Antwort

0

Sowohl BizTalk und JAX-B haben Probleme mit dem Umgang mit der Nutzlast aus unterschiedlichen Gründen. ID/IDREF sind unterstützte XML-Schema-Optionen, aber jede Implementierung scheint Probleme zu haben, sie zu konsumieren.

Für JAX-B, wenn beide idref und nil = true angegeben ist, es zu Marshall die Nutzlast in Objekte nicht in der Lage ist:

<b:xyz z:ref="5" nil="true" /> 

Entfernung des nil = true oder Einstellung nicht Objektreferenzen auf false erhalten (dh aa Nutzlast Rücksendung der idref Fähigkeit verwendet bedeutet, dass Java-Programmierer dieses Problem umgehen können.

BizTalk kann durch erneutes Hydratisieren des xml ohne idref Unterstützung durch xslt Transformationen oder andere Mittel, um dies arbeiten.

Unsere Lösung für beide sollte sicherstellen, dass die Objektverweise beibehalten wurden. Beide Systeme konnten sich dann ohne großen Aufwand integrieren.

0

Was war die Option, die PreserveObjectReferences beim Generieren der xsds konfiguriert hat?

Die xsd werden vom WCF-Dienst generiert, es ist WSDL und wenn in dieser WSDL diese zusätzlichen Attribute nicht definiert sind, wird BizTalk nicht wissen, dass sie existieren und BizTalk wird eine Ausnahme auslösen. Ich bin mir nicht sicher, ob der DataContractSerializer diese Attribute beim Generieren einer WSDL enthalten wird. Wenn der DataContractSerializer diese Attribute beim Generieren einer WSDL nicht enthält, müssen Sie das xsd der Antwortnachricht so ändern, dass xs: any-Attribute für die Elemente zulässig sind, denen diese Attribute hinzugefügt werden.

+0

Danke Rob, wir werden es versuchen, wenn wir es wieder anschauen. – JTew

Verwandte Themen