2009-10-07 1 views
0

Мне нужно отправить исходный XML-адрес на сайт и прочитать ответ. Со следующим кодом я продолжаю получать ошибку «Неизвестный формат файла», и я не уверен, почему.Как написать XML на моем жестком диске GetRequestStream

  XmlDocument sampleRequest = new XmlDocument(); 
      sampleRequest.Load(@"C:\SampleRequest.xml"); 
      byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString()); 

      string uri = "https://www.sample-gateway.com/gw.aspx"; 
      req = WebRequest.Create(uri); 
      req.Method = "POST"; 
      req.ContentLength = bytes.Length; 
      req.ContentType = "text/xml"; 

      using (var requestStream = req.GetRequestStream()) 
      { 
       requestStream.Write(bytes, 0, bytes.Length); 
      } 

      // Send the data to the webserver 
      rsp = req.GetResponse(); 

      XmlDocument responseXML = new XmlDocument(); 
      using (var responseStream = rsp.GetResponseStream()) 
      { 
       responseXML.Load(responseStream); 
      } 

Я довольно уверен, мой вопрос, что/как я пишу в requestStream так ..

Как я могу изменить этот код, чтобы я мог написать XML, расположенный на жестком диске к запрос потока?

+0

Какая строка кода выдает исключение? Каков точный тип исключения? Возможно, разместите стек вызовов. – Brannon

+0

На какой строке вы получаете сообщение об ошибке? – AnthonyWJones

+0

Ошибка найдена в responseXML. – swolff1978

ответ

2

нормально, а не делать sampleRequest.ToString(), вы должны использовать sampleRequest.OuterXml, и что будет делать магию, вы посылали «System.Xml.XmlDocument» вместо Xml

XmlDocument sampleRequest = new XmlDocument(); 
    sampleRequest.Load(@"C:\SampleRequest.xml"); 
    //byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString()); 
    byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.OuterXml); 
0

Два вещи:

Во-первых, всякий раз, когда вы пытаетесь диагностировать проблему с ответом HTML, вы всегда должны проверять, что на самом деле содержит поток ответов. Если бы у вас было в этом случае, вы бы увидели, что он содержит System.Xml.XmlDocument, который бы сразу рассказал вам, что было не так.

Во-вторых, в приложении с любым объемом транзакций вы не захотите загрузить статический XML-файл в XmlDocument перед тем, как поместить его в поток ответов; ваша программа тратит время и память на то, что вам не нужно. (Это даже хуже, чем в вашем случае, ваш подход не только анализирует XML в объект DOM, но затем делает копию в памяти его OuterXml, когда вы кодируете его как UTF-8. Кроме того, вам действительно нужно делаете это?) Вместо этого вы должны создать объект FileStream и использовать один из методов в this answer, чтобы скопировать его в поток ответов.

+0

Я ценю всю информацию - я все еще как-то вроде зеленого программиста, поэтому простите меня, если я скажу что-то глупое, но здесь идет: мы не собираемся загружать документ с жесткого диска, который мы создаем в отдельном метод, но метод вернет XmlDocument, вы говорите, что метод, который создает XmlDocument, должен возвращать нечто, отличное от XmlDocument? каков наилучший способ получить XML в поток в этом случае? – swolff1978

+0

О, нет, здорово создавать XmlDocument в памяти. Код, который вы отправили, загружает XmlDocument с диска, поэтому я предположил, что вы пытаетесь это сделать. Если у вас уже есть объект XmlDocument, я просто напишу его свойство OuterXml в поток ответов. –

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

  • Нет связанных вопросов^_^