0

私はそのような方法を持っています

private bool VerbMethod(string httpVerb, string methodName, string url, string command, string guid, out HttpWebResponse response)

私はこれをこのように使用します

  HttpWebResponse response;
  if (VerbMethod("POST", "TheMethod", "http://theurl.com", "parameter1=a", theGuid, out response))
  {
    using (StreamReader sr = new StreamReader(response.GetResponseStream()))
    {
      string responseString = sr.ReadToEnd();
    }

メソッドがうまくいったかどうかを指定するブール値を返し、データを取得するために応答がoutパラメーターに設定されます。

タイムアウトになることがあり、その後のリクエストもタイムアウトになります。私はこの SOWebRequest.GetResponseがロックするのを見ましたか?

それはusingキーワードを再共通化します。問題は、上記のメソッドシグネチャでは、その方法がわからないことです。

  • 最終的に手動でdisposeを呼び出す必要がありますか?
  • パラメータでまだ使用する方法はありusingますか?out
  • HttpWebResponseメソッドを書き直して、 ?が公開されないようにします。
4

6 に答える 6

6

メソッドがうまくいったかどうかを指定するブール値を返します

それはあなたの問題だ。ブール成功値を使用しないでください。問題が発生した場合は例外をスローします。(むしろ、例外をバブルアップさせます。)

メソッドを変更するだけで、応答が返されます。

于 2012-07-05T07:24:00.813 に答える
3

(例外なく)使用する場合はusing、boolと応答を入れ替えるだけです。

private HttpWebResponse VerbMethod(string httpVerb, string methodName, string url, string command, string guid, out bool canExecute);


bool canExecute = false;

using(HttpWebResponse response = VerbMethod("POST", "TheMethod", "http://theurl.com", "parameter1=a", theGuid, out canExecute))
{
  if (canExecute)
  {
    ..
  }
}
于 2012-07-05T07:24:05.853 に答える
0

関数の最初ですぐにデフォルト値をパラメータに割り当て、すでに使用しているので使用をout続けます。using

于 2012-07-05T07:24:54.610 に答える
0

あなたも使うことができます

    HttpWebResponse response;
    if (VerbMethod("POST", "TheMethod", "http://theurl.com", "parameter1=a", theGuid, out response))
    {
        using (response)
        {
            using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
            {
                string responseString = sr.ReadToEnd();
            }
        }
    }
于 2012-07-05T07:27:00.953 に答える
0

using応答のために別のものを追加できます。

HttpWebResponse response; 
if (VerbMethod("POST", "TheMethod", "http://theurl.com", "parameter1=a", theGuid,
   out response)) 
{ 
  using(response)
  {
    using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
    { 
      string responseString = sr.ReadToEnd(); 
    } 
  }
}
于 2012-07-05T07:27:35.247 に答える
0

あなたはこれを行うことができます:

private bool VerbMethod(string httpVerb, string methodName, string url, 
  string command, string guid, out HttpWebResponse response) {}

HttpWebResponse response = null;

if(VerbMethod(httpVerb, methodName, url, command, guid, out response) {
  using(response)
  {
    using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
    }
  }
}

usingステートメントは、その中の式がオブジェクトであるか、メソッドが返す必要はありません-newどの式でもかまいません。

ただし、通常、リクエストは呼び出すまで起動されないため、オブジェクトが作成されたことを確認する以外のことを実際に行っているGetResponseStream()ことはわかりません。また、ランタイムの単体テストには意味がありません(!)。したがって、最良の方法は、メソッドに応答を返させ、代わりboolにそれを入れることです。using他の答えから、私はこれで一人ではないことがわかります。

ただし、同じ議論を使用して、上記の変更を行うことを正当化することができます。

于 2012-07-05T07:28:01.300 に答える