0

一定時間後にページを呼び出す Windows サービスがあります。ページは、いくつかのレポートを作成します。問題は、2 ~ 3 回の呼び出しの後、サービスが何もしなくなることです。ページを2〜3回呼び出してから、サービスが実行されていることを示していますが、何もしません...サービスでタイマーを使用しています..誰かがここで解決策を教えてくださいありがとう

コード:(ここで t1 は私のタイマーです)

protected override void OnStart(string[] args)
    {
            GetRecords();
            t1.Elapsed += new ElapsedEventHandler(OnElapsedTime);

            t1.Interval = //SomeTimeInterval
            t1.Enabled = true;
            t1.Start();

    }

    private void OnElapsedTime(object source, ElapsedEventArgs e)
    {
        try
        {
            GetRecords();
        }
        catch (Exception ex)
        {
            EventLog.WriteEntry(ex.Message);
        }

    }

    public void GetRecords()
    {


        try
        {
            string ConnectionString = //Connection string from web.config
            WebRequest Request = HttpWebRequest.Create(ConnectionString);
            Request.Timeout = 100000000;
            HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();


        }
        catch (Exception ex)
        {
        }
    }
4

5 に答える 5

1

一般的に適切な HTTP クライアントの慣例と同様に、HttpWebRequest が特定のページまたはサーバーへの同時 HTTP 要求の数を制限する可能性があります。

オブジェクトを適切に破棄していないという事実は、特定のページへの 2 つまたは 3 つの接続を維持しており、それぞれに大きなタイムアウト値があり、最初のいくつかが完了するまで HttpWebRequest がリクエストをキューに入れたり無視したりすることを意味します (クライアントから死ぬ)またはサーバーのタイムアウト、この場合はサーバーである可能性が最も高い)。

'finally' 句を追加して、オブジェクトを適切に破棄してください!

于 2009-08-26T07:21:28.703 に答える
1

さて、コードはどのように見えますか?WebClientページを照会する最も簡単な方法は次のとおりです。

    string result;
    using (WebClient client = new WebClient()) {
        result = client.DownloadString(address);
    }
    // do something with `result`

停止している場合、タイマーコードもグリッチしている可能性があります...

于 2009-02-25T07:47:36.723 に答える
0

マークのアドバイスは、サービスのコンテキストで私にとって役に立ちました

WebClient の使用は確実に機能し、WebRequest はタイムアウトしました。

@jscharfの説明は、私にとってはどれも同じように見えます。

于 2011-03-09T13:52:13.540 に答える
0

おそらく、ページをリクエストしている方法が未処理の例外をスローしており、サービスが操作不能な状態のままになっている可能性があります。

はい、コードが必要です。

于 2009-02-25T07:51:26.530 に答える
0

StreamReader、WebRequest などのオブジェクトの破棄について何かが欠けていると思います。高価なオブジェクトは、使用後に破棄する必要があります。

于 2009-02-25T07:51:38.133 に答える