2009-09-02 4 views
0

Прежде всего, я WEB NOOB. Который, вероятно, объясняет этот вопрос. Во всяком случае, когда я использую web page test app для размещения xml для URL-адреса, все работает нормально. Вот pertinant код с веб-страницы (я думаю):C# Сообщение XML для URL не работает

<form action="/gateway/xml" method="post" id="xml-test-form"> 
    <textarea name="data"> 

    {some xml is in here} 

    </textarea> 
    <input type="submit" value="Submit Test" /> 
</form> 

Когда я пытаюсь представить тот же XML с помощью C# (WebRequest или HttpWebRequest) с типом содержимого («текст/XML» или «приложения/x-www-form-urlencoded ") с закодированным буфером (ASCII или UTF8). Я получаю сообщение об ошибке, которое подразумевает, что XML-файл не может быть прочитан на другом конце. Здесь ошибка:

<?xml version="1.0"?> 
<SubmitOrdersResponse> 
    <status code="0">FAILURE</status> 
    <errors> 
    <error code="1001">Invalid XML Version</error> 
    </errors> 
</SubmitOrdersResponse> 
<br /><b>Warning</b>: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: Empty string supplied as input in <b>/var/www/vhosts/reports.gogetagrip.com/httpdocs/application/models/Gateway.php</b> on line <b>90</b><br /> 

я могу воспроизвести эту ошибку с помощью веб-тестера, удалив XML-элемент с именем. Я думаю, что это первый проверенный элемент и, следовательно, ошибка INVALID XML VERSION. Я думаю, что то, что происходит, - это то, что мое сообщение отправляется через слайды в неправильном формате и этот элемент не может быть прочитан. Я думаю, что конкретно мне нужно смоделировать данные проводки, где мои данные поступают из поля формы данных (см. Выше). Я не знаю, как установить это с помощью класса WebRequest, поэтому я не могу его протестировать. Вот мой код:

static private void Post(string sURL, string sXml) { 
    try { 
    //Our postvars 
    byte[] buffer = Encoding.UTF8.GetBytes(sXml); // Tried ASCII...same result 
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(sURL); // Tried WebRequest ... same result 
    WebReq.Method = "POST"; 
    WebReq.ContentType = "application/x-www-form-urlencoded"; // tried "text/xml"... same result 
    WebReq.ContentLength = buffer.Length; 
    Stream ReqStream = WebReq.GetRequestStream(); 
    ReqStream.Write(buffer, 0, buffer.Length); 
    ReqStream.Close(); 
    WebResponse WebRes = WebReq.GetResponse(); 
    //Console.WriteLine(WebResp.StatusCode); 
    //Console.WriteLine(WebResp.Server); 
    Stream ResStream = WebRes.GetResponseStream(); 
    StreamReader ResReader = new StreamReader(ResStream); 
    string sResponse = ResReader.ReadToEnd(); 
    } catch (Exception ex) { 

    } finally { 

    } 
} 

Любые идеи ?????

+0

Эй, мой приятель предложил просто добавить «data =» в начало моего xml. VOILA! Есть ли лучший способ или это то, что я должен делать? – johnnycrash

+0

Да, это должно сработать. – feroze

ответ

2

Да, есть более простой способ сделать формы Представлять с помощью System.Net ... Класс WebClient является вашим другом.

В этом случае вы будете использовать webClient :: UploadValues ​​(), и он позаботится обо всем остальном.

0

Попробуйте добавить true к инициализации StreamReader.

StreamReader ResReader = new StreamReader(ResStream, true) 

Затем он обнаружит знак байтового заказа.

Kindness,

Dan

+0

Спасибо! Тем не менее, я могу хорошо прочитать ответ, его подачу, которую я напортачиваю. – johnnycrash