簡體   English   中英

從 windows 服務調用 aspx 頁面 - 問題

[英]Calling a aspx page from windows service - Problem

我有一個 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)
        {
        }
    }

HttpWebRequest 可能會限制對特定頁面或服務器的並發 HTTP 請求的數量,這通常是正確的 HTTP 客戶端實踐。

您沒有正確處理對象的事實很可能意味着您正在維護到特定頁面的 2 或 3 個連接,每個連接都有很大的超時值,並且 HttpWebRequest 正在排隊或忽略您的請求,直到前幾個完成(死於客戶端或服務器超時,在這種情況下很可能是服務器)。

添加“finally”子句並正確處理您的對象!

那么,代碼是什么樣的? WebClient是查詢頁面的最簡單方法:

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

如果它停止,計時器代碼也可能會出現故障......

在服務的背景下,馬克的建議對我有用

使用 WebClient 工作可靠,其中 WebRequest 超時。

@jscharf 的解釋對我來說看起來和任何解釋一樣好。

您請求頁面的方式可能會引發未處理的異常,從而使服務處於無法操作的 state 中。

是的,我們需要代碼。

我認為您在處理 StreamReader、WebRequest 等對象時遺漏了一些東西。您應該在使用它們后處理昂貴的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM