powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Extract data from SOAP Body
2 сообщений из 2, страница 1 из 1
Extract data from SOAP Body
    #36413445
Ser_heavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте

Хелп плиз нубу... абсолютно нубский вопрос

Веб-сервис asp.net мной же созданный работает по soap протоколу

и возвращает xml soap ответ в soap Envelope:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDataResponse xmlns="http://tempuri.org/">
<GetDataResult>xml</GetDataResult>
</GetDataResponse>
</soap:Body>
</soap:Envelope>

подскажите плиз мученику (т.е. мне) как распарсить грамотно soap ответ на c# в клиент программе чтоб получить именно данные без оболочки soap между результирующими тегами <GetDataResult>
</GetDataResult> для дальнейшего их отображения

вот стандартная схема... относительно нее должен быть solution

XmlNamespaceManager nsmgr = new XmlNamespaceManager(ResponseDoc.NameTable);
nsmgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
XmlNode nodes = ResponseDoc.SelectSingleNode("soap:Envelope/soap:Body", nsmgr);


foreach (XmlNode xn in nodes.ChildNodes)
{
textbox1.Text += xn.OuterXml;

}

она возвращает результат с лишними тегами <GetData xmlns="http://tempuri.org/"><GetDataResult><abvgd xmlns="">здесь то что надо отобразить</GetDataResult></GetData>

помогите очень прошу... 100% что я велосипед изобретаю о трех колесах

по поводу гугла -- гуглил но результаты поиска привели к тому что, есть вышеуказанный метод, относительно которого должно быть правильное решение
а так же метод по определению префиксов soap:Body и дальнейшего определения строчных индексов тегов <soap:Body> </soap:Body> и вывода отформатированной строки относительно их. Но это не прокатило, потому что стоит только изменить название рутового узла или имя хранимой процедуры, то все это накрывается.
Иначе говоря строчное форматирование не катит никак

извините что так много накатал ... просто хочу подробно проблему охарактеризовать

Заранее огромное спасибо
...
Рейтинг: 0 / 0
Extract data from SOAP Body
    #36413605
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
много буков разбираться что написано не очень хочется

в общем когда мне нужно было объект передать в виде Сериализованного XML, погуглив был найден замечательный код (по мере возможности которым пытаюсь делиться)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public string Serialize<T>(T data)
        {
            using (var memoryStream = new MemoryStream())
            {
                var serializer = new DataContractSerializer(typeof (T));
                serializer.WriteObject(memoryStream, data);

                memoryStream.Seek(0, SeekOrigin.Begin);

                var reader = new StreamReader(memoryStream);
                string content = reader.ReadToEnd();
                return content;
            }
        }

public T Deserialize<T>(string xml)
        {
            //using( var stream = new MemoryStream(Encoding.Unicode.GetBytes(xml)) )
            using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
            {
                var serializer = new DataContractSerializer(typeof (T));
                T theObject = (T)serializer.ReadObject(reader);
                return theObject;
            }
        }

пример использования
пускай у нас есть класс
Код: plaintext
1.
2.
3.
4.
5.
6.
public class Person
{
public int Id {get; set;}
public string FName {get; set;}
public string LName {get; set;}
}

с данными
Код: plaintext
1.
2.
3.
4.
5.
6.
var items = new Person[]
{
new Person(){Id=1, FName="Вася", LName="Пупкин"},
new Person(){Id=2, FName="Витя", LName="Сидоров"},
new Person(){Id=3, FName="Дима", LName="Петров"}
}

сериализуем данные
Код: plaintext
1.
var data = Serialize<Person[]>(items);

отправляем куда надо и десериализуем
Код: plaintext
1.
var data = SerializeDeserialize.Deserialize<Person[]>(receivedData);

п.с. чтобы работало как надо, Отправитель и Получатель обязаны знать объект Person
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Extract data from SOAP Body
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]