Ich versuche, mehrere XAML-Dokumentfragmente an einen SOAP basicHttpBinding
Web-Service als XElement
Instanzen übergeben.Zugriff auf XML-Präfixe in WCF
[ServiceContract(Namespace = "someNamespace")]
interface IMyService
{
[OperationContract]
void Start(XElement someArgument);
}
Die Nachrichten enden mit einem Format wie unten.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:exec="someNamespace"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib">
<soapenv:Header/>
<soapenv:Body>
<exec:Start>
<exec:someArgument>
<SomeObject xmlns="someAnotherNamespace"
xmlns:myPrefix="yetAnotherNamespace">
<AnotherObject Property="{myPrefix:Foo}" />
</SomeObject>
</exec:someArgument>
</exec:Start>
</soapenv:Body>
</soapenv:Envelope>
Alle gut ist myPrefix
auf der Wurzel der XAML Insel definiert ist (d.h. <SomeObject>
). wenn ich die Namespace-Deklaration zum <soapenv:Envelope>
jedoch bewegen (was offensichtlich erlaubt, vorbehältlich Präfix Auseinandersetzungen)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:exec="someNamespace"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:myPrefix="yetAnotherNamespace">
<soapenv:Header/>
<soapenv:Body>
<exec:Start>
<exec:someArgument>
<SomeObject xmlns="someAnotherNamespace">
<AnotherObject Property="{myPrefix:Foo}" />
</SomeObject>
</exec:someArgument>
</exec:Start>
</soapenv:Body>
</soapenv:Envelope>
Das resultierende XElement
nicht mehr Wissen über, dass die URI yetAnotherNamespace
wird durch das Präfix tatsächlich repräsentiert myPrefix
. Stattdessen wird ein generisches Präfix (p2
) zugewiesen.
Daher XamlXmlReader
Lage sein wird, die Markup-Erweiterung {myPrefix:Foo}
, zu lesen, da sie noch mit dem alten Präfix myPrefix
statt p2
zugeordnet ist. Für die XML-Verarbeitung innerhalb von WCF war die Markuperweiterung tatsächlich ein Zeichenfolgenattribut und erhielt keine spezifische Behandlung für Namespacepräfixe.
Das Verhalten, in dem das erfolgreiche Lesen der XML-Insel von der Platzierung der Präfixdeklarationen xmlns:
abhängt, ist höchst verwirrend. Gibt es eine Möglichkeit, Präfixe irgendwie neu zu ordnen, um das Verhalten zu verbessern?