3

Windows azure で自分の Web サービスにリクエストを送信するコードを書いていますが、タイムアウトになるまで応答を取得できないことが判明しました。紛らわしいのは、サービス内のすべてが完了したと確信しているにもかかわらず、応答が返されなかったことです。

私のサービスコードは次のようになります。

public virtual JsonResult ServiceMethod()
{
    // 1. do the work
    // 2. write something to database

    return Json(result, JsonRequestBehavior.AllowGet);
}

私のクライアントコードは次のようになります。

HttpWebRequest webRequest = WebRequest.Create(new Uri(httpAddress)) as HttpWebRequest;
webRequest.Timeout = 1000 * 1000;
webRequest.ServicePoint.ConnectionLeaseTimeout = 40 * 60 * 1000;
webRequest.ServicePoint.MaxIdleTime = 40 * 60 * 1000;
webRequest.ServicePoint.SetTcpKeepAlive(true, 50 * 1000, 1000);
webRequest.Method = "GET";


using (HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse)
{
    // handle the response
}

データベースに何かを書き込もうとしたところ、それが起こったので、サービスのコードが完了したと確信しています。また、サービスがホストされている仮想マシンの iis ログを確認したところ、http 200 が返されたことが示されました。しかし、クライアント コードの GetResponse() 呼び出しは、1000 秒のタイムアウトに達するまでハングしました。

アップデート

メソッドの実行時間に影響を与える Web API へのパラメーターがあります (簡単にするために、上記のコードには示していません)。サービス メソッドが十分に長い時間 (6 分から 7 分など) 実行されると、ハングの問題が発生します。それ以外の場合、Web 応答は正常に返されます。したがって、タイムアウト設定に問題がある可能性があります。しかし、HttpWebRequest とその基本クラスにはいくつかのタイムアウト プロパティがあり、それらのどの組み合わせがこの問題を引き起こしたり解決したりするのかわかりません。

問題が何であるかについてのアイデアはありますか?どうもありがとう。

4

2 に答える 2

0

あなたのコードから、JsonResultそしてアクションから戻ってきているので、RESTful アーキテクチャを持っているようです。RESTful アーキテクチャをデバッグする方法の 1 つは、ブラウザを使用することです。特に、HTTP メソッドがGETの場合はそうです。

URL をコピーしてブラウザのアドレス バーに貼り付けるだけで、応答があるかどうかを確認できます。結果が表示される場合は、クライアント コードに問題があります。それ以外の場合は、サーバー側 (Azure サーバー) に問題があります。

HTTP トラフィックを監視するための優れたユーティリティはFiddlerです。

于 2013-11-15T10:38:05.583 に答える