从URL读取XML有奇怪的问题
本文关键字:问题 URL 读取 XML | 更新日期: 2023-09-27 17:54:23
我的代码:
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配置文件。问题是XML数据来源的系统没有IIS,它甚至没有web服务器。它只是一个程序在该端口上监听,等待输出XML。
我可以冲浪(使用任何浏览器,即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>
如果有人有什么想法,我很乐意听听。
当您告诉浏览器使用url打开文件时,您正在利用本地文件(甚至网络)系统。浏览器实际上能够打开文件并读取它。当你告诉XmlTextReader打开一个带有URL的文件时,你是在告诉它发出一个httpRequest并期望得到一个httpResponse作为回报,这需要一个某种类型的互联网服务器。
您可能能够替换一个filestreamreader,然后将该流提供给XmlTextReader,但我还没有尝试过。您可能会更好地从web服务器提供该文件,或者通过UNC而不是URL访问它。
我曾经有过一次类似的错误,尽管我不记得是否正是这样。无论如何,您可以尝试对我有效的解决方案:在下载任何内容之前设置以下属性:
ServicePointManager.Expect100Continue = false;