2009-10-07 65 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 2009-10-07 15:47:27

+0

你在哪一行得到错误? – AnthonyWJones 2009-10-07 15:48:29

+0

在响应XML中找到错误。 – swolff1978 2009-10-07 15:59:18

回答

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对象,而且还将它编码为UTF-8时,它会在内存中复制它的OuterXml属性。是这样做的吗?)相反,您应该创建一个FileStream对象,并使用this answer中的技术之一将其复制到响应流中。

+0

我欣赏所有的信息 - 我仍然是一个绿色的程序员,所以如果我说一些愚蠢的东西,请原谅我,但是这里说的是:我们不会从硬盘中加载文件,我们正在单独构建它方法,但该方法将返回一个XmlDocument,你是说构建XmlDocument的方法应该返回除XmlDocument之外的其他东西吗?在这种情况下,将XML放入流中的最佳方式是什么? – swolff1978 2009-10-08 21:19:31

+0

哦,不,在内存中构建一个XmlDocument是非常酷的。你发布的代码是从磁盘加载XmlDocument,所以这就是我认为你正在尝试做的事情。如果你已经有了XmlDocument对象,我只需要将它的OuterXml属性写入响应流。 – 2009-10-08 22:17:34