2017-08-04 34 views
0

我做了一個簡單的html測試頁。如果頁面被打開(http://localhost/cut/public/updateFile),那麼我發送一個時間戳到我的網絡服務器,其中值被寫入一個文件date.txt例如:C#Windows窗體應用程序 - 通過打開html發送請求

2017年4月8日14點50分19秒@

我還寫了一個C#Windows窗體應用程序,它向Web服務器發出請求,以每X秒獲取此文件的值(date.txt)。

我的目標是從文件中讀取到服務器上(僅適用於實踐)

但是每X秒,以顯示在通知中的當前時間,之前我得到的文件內容,我需要更新它首先得到當前的日期和時間。

有沒有可能用上面定義的規則解決這個問題? 這是我的嘗試:

private void timerA_Tick(object sender, EventArgs e) 
    { 
     sendWebRequest("http://localhost/cut/public/updateFile"); 
     timerA.Stop(); 
     timerA2.Interval = 5000; 
     timerA2.Start(); 
    } 


    private void timerA2_tick(object sender, EventArgs e) 
    { 

     //Returns the content of date.txt 
     string response = sendWebRequest("http://localhost/cut/public/fileApi?action=read&targetFile=date"); 

     //Show Notification 
     notifyIcon1.Visible = true; 
     notifyIcon1.Icon = SystemIcons.Exclamation; 
     notifyIcon1.BalloonTipTitle = "File content"; 
     notifyIcon1.BalloonTipText = response; 
     notifyIcon1.BalloonTipIcon = ToolTipIcon.Info; 
     notifyIcon1.ShowBalloonTip(10000); 

     timerA2.Stop(); 
     timerA.Start(); 
    } 

    /** 
    * Send request and get response as string 
    */ 
    public static string sendWebRequest(string URL) 
    { 
     WebRequest request = WebRequest.Create(URL); 
     WebResponse response = request.GetResponse(); 

     StreamReader streamReader = new StreamReader(response.GetResponseStream()); 

     return (string)streamReader.ReadToEnd(); 

    } 

不過,我總是得到4/8/2017 @ 14:50:19它不更新,因爲它應該。

它顯然不會這樣工作,因爲WebRequest.Create只會獲取html文件,並將其傳回給我的C#應用​​程序,但它不會執行JavaScript,因爲我向服務器發出請求。

我只是在上面創建了這個例子,以問它是否有可能通過這種方式實現這一點,或者如果C#沒有被設計來解決像這樣的問題?

我唯一的想法是建立在我的Form1中隱藏的網頁瀏覽器和開放http://localhost/cut/public/updateFile開始更新,但我不知道這甚至工程。


enter image description here

我創建了一個網頁瀏覽器元素,並調用更新網址是這樣的:

webBrowser1.Navigate("http://localhost/cut/public/updateFile"); 

然而,也有很多腳本錯誤消息,這是在jQuery的文件中找到的。

enter image description here

而且我的腳本也不會因爲不工作的jQuery的工作。 所以我想這會工作,但不是與jQuery,或者我必須修復jQuery文件中的所有錯誤。

如何解決這個問題?

+0

'webBrowser1.ScriptErrorsSuppressed = TRUE;' - 設置此和再試一次 - https://stackoverflow.com/questions/2476360/disable-javascript-error-in-webbrowser-control – Subbu

+0

@Subbu,已經嘗試過,但它沒有幫助,因爲腳本仍然沒有工作。 – Black

回答

0

您應該從一個真正的瀏覽器打開http://localhost/cut/public/updateFile,它將在頁面上執行javascript。使用WebRequest從窗體應用程序請求此頁面將僅返回頁面的內容,但不會處理或執行頁面上的JavaScript,因爲它未呈現或處理。

+0

但我嘗試在沒有任何用戶交互的情況下自動化整個過程,我不希望用戶每隔5秒刷新頁面......必須有一種方法。我只是用C#webbrowser試了一下,但我只是讓它工作如果我用'webBrowser1.Navigate(「http:// localhost/cut/public/updateFile」,true)打開瀏覽器externaly;'但這不是它應該如何,沒有人希望窗戶一直彈出。 – Black

+1

另一種方法是使用C#編寫服務器端代碼,該代碼將在準備好的頁面請求時執行,或者編寫http模塊。 – Frits

0

我解決它通過添加一個網頁瀏覽器元素,我的表格,並呼籲這樣它裏面的網址:

webBrowser1.Navigate("http://localhost/cut/public/updateFile"); 

然而,我不得不重寫我的javascript,使其不jQuery的工作,因爲C#Webbrowser似乎是一個極其舊的Internet Explorer,沒有任何支持。有指向類似下面的腳本錯誤很多警報:

enter image description here

現在按預期工作。我希望有一天有人會遇到比這更好的解決方案。

UPDATE

我能夠加入這一行我的HTML頭部分的改變瀏覽器的最新版本:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/> 
<!-- IE=edge instructs the WebBrowser control to use the latest version of IE it supports --> 
相關問題