0

私のコードのこの部分は例外をスローします。どうすれば修正できますか?

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:エラー:ConnectFailure(十分なバッファースペースが利用できません)

完全なエラーhttp://pastebin.com/8u6MpeWS

編集:追加する locrequest.XmlResolver = null; と、別の例外がスローされます:

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません

それのどこが悪いんだい?

4

3 に答える 3

0

Aghilasの投稿に基づいて構築しています...

返されるストリームはシークできないストリームであるため、次のような関数を使用して最後まで読み取る必要があります。

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をロードします。

Aghilasのコードの下部から始めていることを忘れないでください...

byte[] buffer = readFullStream(dataStream);
XmlDocument locrequest = new XmlDocument();
locrequest.LoadXML(new UFT8Encoding().GetString(buffer));

お役に立てれば。

于 2012-09-20T19:35:01.777 に答える
0

インゴ、

この問題についての元の投稿に基づいて構築する、おそらくこれにより、ピースがもう少し明確にまとめられます。何らかの理由でサーバーが接続を受け入れていないというだけでなく、接続の失敗についてより基本的なことが手元にあると仮定すると、Aghilas が指摘したように、XmlDocument クラスのデフォルトの Load() メカニズムをバイパスできます。 WebRequest オブジェクト。

WebRequest オブジェクトは、指定した URL にアクセスし、Request/Response モデルを使用して Response オブジェクトを作成します。その Response オブジェクトから、GetResponseStream() メソッドを介して、応答のデータへのストリームを取得できます。それがアギラスが示したものです。次に、そのストリームを取得して、彼のサンプルの変数 dataStream に配置し、それを Stream を必要とする XmlDocument.Load() メソッドのオーバーロードに渡すことができます。

   //assuming prior code from Aghilas is here as appropriate...
   Stream dataStream = response.GetResponseStream();
   XmlDocument locRequest = new XmlDocument();
   locRequest.Load(dataStream);

お役に立てれば。

于 2012-09-21T15:05:00.047 に答える
0

WebRequestファイルをロードするためにクラスを使用できます

リンク: http://msdn.microsoft.com/library/system.net.webrequest.aspx

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 ();
..... 
于 2012-09-20T18:27:35.973 に答える