从URL读取XML的奇怪问题

时间:2011-05-03 19:11:03

标签: c# .net xml

这是我的代码:

        string url = @"http://eafsys:1234/vp.xml";
        try
        {
            XmlTextReader reader = new XmlTextReader(url);
            while (reader.Read())
            {
                // do whatever..
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

当我运行它时,我发现以下错误:

'服务器提交了协议违规。节= ResponseStatusLine'

我搜索了互联网,显然我应该在我的IIS中更改一些web.config文件。事情是XML数据来自的系统没有IIS,它甚至没有Web服务器。它只是一个监听该端口等待输出XML的程序。

我可以浏览(使用任何浏览器,I.E或FireFox)到http://eafsys:1234/vp.xml并获得格式良好的XML。

以下是XML的原始(源视图):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<EAFSTATUS>
<EAST>
<HEAT_NO>100633</HEAT_NO>
<GRADE>EA174  </GRADE>
<HEATSTATUS>MELT</HEATSTATUS>
<CHARGENUM>2</CHARGENUM>
<CRMTEMP>1657</CRMTEMP>
<CRMC> 0.0519</CRMC>
<CHARGE>178000</CHARGE>
<ENERGY>80710</ENERGY>
<ELECTKWH>46400</ELECTKWH>
<POWERONTIME> 33:18</POWERONTIME>
<POWERSTATUS>OFF</POWERSTATUS>
<DELAYDUR>3:18</DELAYDUR>
<DELAYSTATUS>OPEN </DELAYSTATUS>
<DELAYREASON>          NO REASON </DELAYREASON>
</EAST>
<WEST>
<HEAT_NO>100632</HEAT_NO>
<GRADE>EA174  </GRADE>
<HEATSTATUS>REF </HEATSTATUS>
<CHARGENUM>2</CHARGENUM>
<CRMTEMP>1529</CRMTEMP>
<CRMC> 0.0418</CRMC>
<CHARGE>178500</CHARGE>
<ENERGY>95010</ENERGY>
<ELECTKWH>54500</ELECTKWH>
<POWERONTIME> 39:06</POWERONTIME>
<POWERSTATUS>OFF</POWERSTATUS>
<DELAYDUR></DELAYDUR>
<DELAYSTATUS></DELAYSTATUS>
<DELAYREASON></DELAYREASON>
</WEST>
<LMF_EAST>
<HEAT_NO>100631</HEAT_NO>
<GRADE>EA719  </GRADE>
<HEATSTATUS>DONE</HEATSTATUS>
<LMF_TIME> 58:48</LMF_TIME>
<TEMP>1546</TEMP>
<WT>163100</WT>
<SAMP>M03</SAMP>
<SAMP_S>0.005760</SAMP_S>
<CAO>0</CAO>
<AL2O3>0</AL2O3>
</LMF_EAST>
<LMF_WEST>
<HEAT_NO>100632</HEAT_NO>
<GRADE>EA174  </GRADE>
<HEATSTATUS>REF </HEATSTATUS>
<LMF_TIME> 47:42</LMF_TIME>
<TEMP>1566</TEMP>
<WT>167500</WT>
<SAMP>M02</SAMP>
<SAMP_S>0.000000</SAMP_S>
<CAO>0</CAO>
<AL2O3>0</AL2O3>
</LMF_WEST>
<CASTER>
<HEATNUM>100631</HEATNUM>
<OUTBOARDHEATNUM>0</OUTBOARDHEATNUM>
<CASTSPEED>1.295000</CASTSPEED>
<CASTWIDTH>1.365312</CASTWIDTH>
<REMAININGWEIGHT>66714</REMAININGWEIGHT>
<NEXTTIME>15:20:13.00</NEXTTIME>
<HEATDUR>55</HEATDUR><LADLESINSERVICE>4</LADLESINSERVICE></CASTER>
</EAFSTATUS>

如果有人有任何想法,我很乐意听到。

2 个答案:

答案 0 :(得分:2)

当您告诉浏览器打开带有URL的文件时,您正在利用本地文件(甚至网络)系统。浏览器实际上能够打开文件并阅读它。当你告诉XmlTextReader打开一个带有URL的文件时,你告诉它发出一个httpRequest并期望一个httpResponse作为回报,这需要一个有某种风味的互联网服务器。

您可以替换filestreamreader,然后将该流提供给XmlTextReader,但我还没有尝试过。您可能更好地从Web服务器提供该文件,或通过UNC而不是URL访问该文件。

答案 1 :(得分:0)

我曾经有过类似的错误,虽然我不记得是不是这样。无论如何,您可以尝试适用于我的解决方案:在下载任何内容之前设置以下属性:

ServicePointManager.Expect100Continue = false;