Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从URL读取XML时出现奇怪的问题_C#_.net_Xml - Fatal编程技术网

C# 从URL读取XML时出现奇怪的问题

C# 从URL读取XML时出现奇怪的问题,c#,.net,xml,C#,.net,Xml,这是我的密码: string url = @"http://eafsys:1234/vp.xml"; try { XmlTextReader reader = new XmlTextReader(url); while (reader.Read()) { // do whatever.. } }

这是我的密码:

        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);
        }
当我运行它时,我发现以下错误:

'服务器违反了协议。区段=响应STATUSLINE'

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

我可以(使用任何浏览器,如FireFox)浏览,得到格式良好的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>

100633
EA174
熔化
2.
1657
0.0519
178000
80710
46400
33:18
关
3:18
打开
没有理由
100632
EA174
裁判
2.
1529
0.0418
178500
95010
54500
39:06
关
100631
EA719
完成
58:48
1546
163100
M03
0.005760
0
0
100632
EA174
裁判
47:42
1566
167500
M02
0
0
0
100631
0
1.295000
1.365312
66714
15:20:13.00
554

如果有人有什么想法,我很想听听。

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


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

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

ServicePointManager.Expect100Continue = false;

我猜
XmlTextReader.Read()
函数正在寻找一个合适的HTTP状态代码。我建议先用WebClient下载XML,然后将其作为流加载到XmlReader中……我想实现HTTP服务器不仅仅是监听端口80并等待输出XML。@jnpcl这是什么@伯劳鸟网络客户给了我完全相同的错误@康拉德弗里克斯是的,我想是的。但我们一直在提供html、xml纯文本,没有任何问题。我的问题只有在尝试使用.net使用xml时才会出现。您所说的只是一个程序在该端口上侦听,等待输出xml是什么意思。这个节目收听什么?XmlTextReader()可能正在向它发送正确的HTTP请求,并且正在抛出,因为它没有得到正确(有效)的HTTP响应。您可以使用Fiddler2查看消息交换。(免费下载,好工具)问题在于提供的数据是在没有web服务器的VMS系统上。但是您应该能够在“附近”(虚拟空间)挂起一个web服务器,该服务器可以接受httpRequest,并从VMS获取流,然后将其打包到httpResponse。如果URL的协议为
http://
,您正在告诉浏览器也发出HTTP请求。既然他说这是可行的,那就意味着这台机器上有一个工作的web(HTTP)服务器。@svivk没有。。这台机器上没有web服务器,我编写了一个套接字程序来监听端口1234,同样可以监听端口80或8000。@carny666…当你说“我编写了一个套接字程序来监听端口1234”时,你说的是你创建了一个简单的web服务器。它接收一个httpRequest(虽然在端口1234而不是80上),并以创建返回请求者的流的形式作为响应发出。考虑到这一点,我猜XmlTextReader发出的请求不同(不太可能,但可能),或者它没有准备好处理从端口侦听器(最有可能是浏览器)收到的响应。如果你能记录这些活动,你可能会发现你的断开连接。