Мы наблюдали, что когда мы предоставляем сервис WCF, который использует классы, украшенные различными атрибутами сериализации xml, несмотря на тот факт, что мы используем атрибут XmlSerializerFormat в интерфейсе, любой атрибут XmlRoot любого параметра операции полностью игнорируется.
Пространство имен параметров всегда соответствует пространству службы, а не тому, что мы указываем.
Это вызывает у нас проблемы, поскольку он не имеет обратной совместимости с ASMX, а также потому, что мы используем BizTalk, и нам необходимо более жестко контролировать форму обмениваемого XML.
Несколько вопросов тогда -
- Кто-нибудь знает, что является обоснованием
за этим решением?
- Кто-нибудь знает
как это происходит? Я был под
впечатления, что WCF, с
Атрибут XmlSerializerFormat, использует
XmlSerialiser для сериализации
типы, которые предлагают XmlRoot
следует учитывать, как
давай это не тот случай? (это
только в связи с тем, что, принимая
конверт SOAP во внимание,
параметр не является корневым?)
- Большинство
главное - кто-нибудь знает, если
есть способ «заставить проблему» -
то есть получить параметры для
пространство имен по нашему выбору?
Я видел эту запись, но я не думаю, что она имеет отношение к моему вопросу -
По запросу Вагнера Сильвейры - контракты, которые я использовал для проверки этого, -
[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; }
}