[英]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.