首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML文档System.Net.WebException

XML文档System.Net.WebException
EN

Stack Overflow用户
提问于 2012-09-20 18:25:05
回答 3查看 947关注 0票数 0

我的代码的这一部分会引发异常。我怎么才能解决呢?

代码语言:javascript
复制
XmlDocument locrequest = new XmlDocument();
locrequest.Load(String.Format("http://api.geoips.com/ip/{0}/key/.myapikey./output/xml/", player.IP));
XmlNode root = locrequest.DocumentElement;
string from = root.SelectSingleNode("country_name").InnerText.ToLower();

System.Net.WebException: Error: ConnectFailure (可用缓冲区空间不足)

全误差http://pastebin.com/8u6MpeWS

编辑:如果我添加locrequest.XmlResolver = null;,它会抛出另一个异常:

System.NullReferenceException:未设置为对象实例的对象引用

这有什么问题吗?

EN

回答 3

Stack Overflow用户

发布于 2012-09-20 18:27:35

您可以使用WebRequest类来加载文件

链接:http://msdn.microsoft.com/library/system.net.webrequest.aspx

代码语言:javascript
复制
WebRequest request = WebRequest.Create ("...");
// If required by the server, set the credentials.
request.Credentials = CredentialCache.DefaultCredentials;
// Get the response.
WebResponse response = request.GetResponse ();
// Display the status.
Console.WriteLine (((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream ();
..... 
票数 0
EN

Stack Overflow用户

发布于 2012-09-20 19:35:01

建立在阿吉拉斯的岗位上..。

返回的流是不可查找的流,因此需要使用类似于以下内容的函数读取到它的末尾:

代码语言:javascript
复制
static byte[] readFullStream(Stream st)
    {
        Array Buffer = (byte[])Array.CreateInstance(typeof(byte), 32768);
        System.Int32 Size;
        bool eof = false;
        MemoryStream ms = new MemoryStream();
        while (!eof)
        {
            Size = st.Read((byte[])Buffer, 0, Buffer.Length);
            if (Size > 0)
            {
                ms.Write((byte[])Buffer, 0, Size);
            }
            else
            {
                eof = true;
            }
        }
        return ms.ToArray();
    }

然后,一旦从上面的函数获得字节数组,就用它加载您的XmlDocument。

记住,我们从阿吉拉斯密码的底部开始.

代码语言:javascript
复制
byte[] buffer = readFullStream(dataStream);
XmlDocument locrequest = new XmlDocument();
locrequest.LoadXML(new UFT8Encoding().GetString(buffer));

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2012-09-21 15:05:00

因戈

在你最初发布的关于这个问题的文章here的基础上,也许这会让你的文章更清晰一些。假设有一些关于连接故障的基本内容,而不仅仅是由于任何原因,服务器不接受连接,那么您可以使用XmlDocument类的默认Load()机制,就像Aghilas指出的那样,使用一个WebRequest对象。

WebRequest对象与您指定的URL联系,然后使用请求/响应模型创建响应对象。从该响应对象,您可以通过GetResponseStream()方法获得响应的数据流;这是Aghilas演示的。然后,您可以获取该流,并将其放在示例中的变量dataStream中,并将其传递给期望流的XmlDocument.Load()方法的重载:

代码语言:javascript
复制
   //assuming prior code from Aghilas is here as appropriate...
   Stream dataStream = response.GetResponseStream();
   XmlDocument locRequest = new XmlDocument();
   locRequest.Load(dataStream);

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12518612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档