2012-03-28 2 views
0

Привет и хороший день все,Получить Внутренний XML в WCF из XMLHTTP POST запрос

Я могу послать XML HTTP POST запрос на WCF после его решения по этой теме: Handle POST request from XML HTTP in WCF

Но прямо сейчас, я я все еще пытаюсь найти правильный путь для извлечения внутреннего XML из запроса. Я посылаю запрос в виде XML:

<?xml version=""1.0"" encoding=""UTF-8"" standalone= ""yes""?><AFISQuery transid=""3356434""><Request CIFNO =""123456789"" IC= ""770707-07-7777"">TEST</Request></AFISQuery> 

В классе AFISQuery, я поставил его как:

[DataContract(Namespace = "")] 
public class AFISQuery 
{ 
    public AFISQuery(string transid) 
    { 
     this.transid = transid; 
    } 

    [DataMember]   
    public string Request { get; set; } 

    [DataMember] 
    public string transid { get; set; } 
} 

В результате, я могу получить запрос («TEST»), но не может получить транзитную информацию. Я попытался осматривать форумы, но не нашел похожих проблем.

Вопрос в том, можно ли получить информацию из внутреннего XML запроса? Для этого экземпляра это CIFNo, transid и ICNo.

Заранее спасибо :)

ответ

0

Причина вы сможете получить запрос в том, что запрос является XML-элемент. Элементы XML отображаются непосредственно в DataMembers, и в результате запрос десериализуется должным образом в Request DataMember по типу контракта данных AFISQuery.

Проблема с «транзитом» заключается в том, что это атрибут. Атрибуты не поддерживаются DataContractSerializer, и они никоим образом не могут поддерживаться. Вам нужно изменить XML-запрос запроса, чтобы он прошел как элемент, подобно тому, как Request является элементом.

Обратите внимание, что даже если для параметра «Запрос» установлено значение для вас прямо сейчас, атрибуты элемента «Запрос» в XML, который у вас есть, полностью игнорируются. С этим может быть или не быть.

Если вам не нужны атрибуты, или если вы хотите поддерживать сериализуемые элементы в качестве атрибутов, вам может потребоваться переключиться на XmlSerializer из DataContractSerializer. Это легко сделать, просто украсьте сервисы или операции, о которых вы заботитесь, - которые вы хотите переключить на XmlSerializer - с помощью [XmlSerializerFormat.]

Смежные вопросы