2016-03-23 28 views
0

私はサーバーに電話をかけるコンソールアプリケーションを持っています。アプリで"どのように解決されたオブジェクトSystem.net.HttpWebResponseにアクセスできません"を解決するには?

<system.net> 
    <settings> 
     <httpWebRequest useUnsafeHeaderParsing="true" /> 
    </settings> 
    </system.net> 

"Cannot access a disposed object.\r\nObject name: 'System.Net.HttpWebResponse'."

グーグルの後、私はいくつかの試み、ビーイングのいずれかを試してみました:私はなステートメントを使用してにこれを入れて逃し、私はこのエラーを取得保管することをやった後にすることを実現しました

の.config私はまだ同じエラーを取得し、私は、なぜ 私のコードを知らない:

public static HttpWebResponse CallServer(string url) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(url); 
    var webResp = (HttpWebResponse)null; 
    using (webResp = (HttpWebResponse)request.GetResponse()) 
    { 

    } 

    return webResp; 
} 

どうすれば解決できますか?

答えて

2

using (webResp ...)は、usingステートメントの末尾に応答を配置します。それ以降の応答へのアクセスは失敗します。

簡単な解決策は、実際に完了するまでwebRespの処分を遅らせることです。 webRespを受け取る方法で処理することができます。

私は多少このようusingを作成する必要がありますね:

using (HttpWebResponse x = CallServer(url)) 
{ } 

そしてCallServerメソッド内usingを削除します。

+0

@Patrickホフマン – ThunD3eR

1

コンパイラはこのような何かにusing文を翻訳:だからあなたはwebRespを返すと、あなたは、using文の中にそれを入れてはいけません、あなたの方法の外に、このオブジェクトを使用したい場合は

HttpWebResponse webResp; 
try 
{ 
    webResp = (HttpWebResponse)request.GetResponse(); 
} 
finally 
{ 
    webResp.Dispose(); 
} 

usingなるためDisposeオブジェクトです。そして、(例外メッセージがはっきりと述べるように)配置されたオブジェクトを使用することはできません。

おそらくusing文でCallServerにお電話をラップしたい:

using (HttpWebResponse webResp = CallServer("http://...")) 
{ 
    // do something with your response 
} 
+0

はあなたに感謝ありがとうございます!私にはいくつかの選択肢がありました – ThunD3eR

関連する問題