Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Отправка XML методом POST С#


Автор: midnight_rabbit 19.2.2008, 10:49
 Может уже был вопрос, но все же.
Суть такова, нужно отправить хэмээль методом пост и получить данные.
Гуглил, нахожу все то же, что и у меня.

Делаю так

Код

XmlSerializer serializer = new XmlSerializer(typeof(SomeRequestClass)); //SomeRequestClass - Класс основанный на схеме запроса
XmlSerializer serializer2 = new XmlSerializer(typeof(SomeResponseObject)); ///SomeResponseClass - Класс основанный на схеме ответа

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri);

request.Method = "POST";

request.ContentType = "text/xml";

XmlTextWriter writer = new XmlTextWriter(request.GetRequestStream(), Encoding.UTF8);

serializer.Serialize(writer, req);

writer.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

XmlReader srData = XmlReader.Create(response.GetResponseStream());

SomeResponseObject resp = (SomeResponseObject)serializer2.Deserialize(srData); //SomeResponseClass - Класс основанный на схеме ответа

srData.Close();


Проблема основная заключается в том, что ответ не приходит, то есть приходит пустой стрим, на стороне сервера проблем точно нет. Если я ввожу неправильные данные для отправки, ошибку он мне возвращает, опять же иногда, то возвращает, то нет. Видимо это связано с тем, что сообщение об ошибке оч мало по объему, а правильный ответ довольно большой. Пробовал слип ставить, но это не помогает...


Что я делаю не так?

Наверх    
  

Автор: PPS05 19.2.2008, 16:17
Имею мысль, что ты должен прочитать весь поток до конца, ибо сервер не отдает данные, пока ты не попросишь. Что-то вроде этого:

Код

HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();


Потом responseFromServer можно использовать для десериализации.

Автор: midnight_rabbit 20.2.2008, 10:50
Спасибо за ответ, 

Теперь респонс приходит такой
"Empty XML [parameter "request", a method of transfer "POST"]"


То есть он не видит XML которуя передаю smile 

Автор: midnight_rabbit 20.2.2008, 16:54
Все заработало, оказца надо было дополнительные параметры указывать в отправляемых постом данных.
 smile 

Всем спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)