Zauważyliśmy, że gdy udostępniamy usługę WCF, która używa klas ozdobionych różnymi atrybutami serializacji xml, pomimo faktu, że używamy atrybutu XmlSerializerFormat w interfejsie każdy atrybut XmlRoot na którymkolwiek z parametrów operacji zostanie całkowicie zignorowany. Przestrzeń nazw parametrów jest zawsze tą usługą, a nie tym, co określamy.Dlaczego atrybut XmlRoot zostanie zignorowany w WCF i jak przezwyciężyć ten błąd?
Powoduje to problemy, ponieważ nie jest kompatybilny wstecz z ASMX, a także dlatego, że używamy BizTalk i musimy mieć ściślejszą kontrolę nad kształtem wymienianych danych XML.
Kilka pytań następnie -
- ktoś wie co jest uzasadnienie za tą decyzją?
- Ktoś wie, jak to się dzieje? Byłem pod wrażenia, że WCF, z atrybutem XmlSerializerFormat, wykorzystuje się XmlSerialiser do serialise typy , co sugerowałoby XmlRoot powinny być brane pod uwagę, w jaki sposób przyjść nie jest to przypadek? (Jest to tylko ze względu na fakt, że biorąc kopertę SOAP pod uwagę parametr nie jest root?)
- Most ważniejsze - kto wie, czy istnieje sposób, aby „wymusić problem” - tj uzyskać parametry należące do wybranej przez nas przestrzeni nazw ?
Widziałem this post, ale nie wierzę, że jest istotne dla mojego pytania -
Jak na zamówienie Wagner Silveira - kontrakty używałem do testowania tego są -
[ServiceContract(Namespace = "http://servicecontract"),
XmlSerializerFormat(Style = OperationFormatStyle.Document)]
public interface ITestService
{
[OperationContract]
MyOtherType MyTestMethod(MyType obj);
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyType
{
[XmlAttribute]
public string StringValue { get; set; }
}
// Composite class for DCS and XMLS
[Serializable, XmlType, XmlRoot(Namespace = "http://datacontract")]
public class MyOtherType
{
[XmlAttribute]
public string OtherStringValue { get; set; }
}
Dzięki John Ustaliliśmy opcję MessageContract, wydaje się, że jest dużo kłopotów z czymś, co działało w ASMX, i dlatego też nie byłem pewien co do argumentu węzła root-root, ale myślę, że to ma sens. Osobiście uważam, że to cios dla kompatybilności wstecznej. –