none
【VB.net】WebBrowser + Timer 跑8個小時候異常 RRS feed

  • 問題

  • 各位前輩們好
    小弟的程式約略流程
    WebBrowser(URL) -> 模擬按網頁中的Button -> Split網頁秀出的結果
    以上流程10秒自動執行一次

    以這樣的跑法大約跑4~8個小時
    就會出現錯誤

    因為小弟是放在那邊跑
    沒有做錯誤上的紀錄
    因為有加try去除錯
    只要無法Split就會在秀出的資料中用【初始化】代替
    但是再出現這字眼的時候,用IE開,網站是活的
    只要把程式重啟,就恢復正常

    小弟的淺見判斷
    1.WebBrowser每隔時間需要清除cache
    2.設定出現【初始化】連續10次,Form自動Reload
    3.把宣告的split陣列清除

    不知道版上的大大們有沒有解決方法或是其他見解?
    謝謝

    新增:錯誤LOG
    歷經4小時之後
    在split出現 【索引在陣列的界限之外】
    爾後就沒有再成功過~


    Imports System.Net.Sockets
     
    Imports System.Text
     
    Imports System.Net
     
    Imports System.IO
     
    
    
    Public Class Form1
     
    Dim Time_count As Integer = 5
     
    Dim test As Integer = 0
     
    Dim ODS_check As Boolean = False
     
    Dim ODS_check_1 As Boolean = False
     
    Dim ODS_s As String = "2000-01-01 23:00:14"
     
    Dim d1 As Date
     
    Dim d2 As Date
     
    Dim start_MSG As String = "開始執行"
     
    Dim end_MSG As String = "結束"
     
    Dim ODS_start() As String
     
    Dim ODS_end() As String
     
    Dim filename As String = Format(Now(), "yyyyMMdd")
     
    Private myTcpClient As TcpClient
     
    
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
    d1 = DateTime.ParseExact(ODS_s, "yyyy-MM-dd HH:mm:ss", Nothing)
     
    Timer1.Enabled = True
     
    aboutME.Text = "P.D by G@2012.11.30"
     
    Me.Width = "400"
     
    Me.Height = "200"
     
    End Sub
     
    
    
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
     
    Button1.PerformClick()
     
    
    
    End Sub
     
    
    
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
    Label3.Text = "將於 " & Time_count & " 秒後更新...."
     
    Time_count -= 1
     
    If Time_count < 0 Then
     
    Button2.PerformClick()
     
    Time_count = 5
     
    End If
     
    
    
    If ODS_check = True AndAlso ODS_check_1 = True Then
     
    ODS_check = False
     
    ODS_check_1 = False
     
    ForWIN7("1.1.1.1", end_MSG & ODS_end(1))
     
    
     
    End If
     
    
    
    End Sub
     
    
    
    
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
    
    
    Try
     
    Dim hec As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
     
    For Each element As HtmlElement In hec
     
    If element.GetAttribute("name") = "OPBut" Then
     
    element.InvokeMember("click")
     
    End If
     
    Next
     
    Catch ex As Exception
     
    Label1.Text = "開始時間:網頁異常....."
     
    Label2.Text = "結束時間:網頁異常....."
     
    Try
     
    Dim writer = My.Computer.FileSystem.OpenTextFileWriter("c:\log\" & filename & ".txt", True)
     
    writer.WriteLine(Now & ex.Message)
     
    writer.Close()
     
    Catch ex1 As Exception
     
    Dim swWriter As StreamWriter = New StreamWriter("c:\log\" & filename & ".txt", False, System.Text.Encoding.Default)
     
    swWriter.Write(Now & ex.Message)
     
    swWriter.Close()
     
    End Try
     
    End Try
     
    
    
    
    
    End Sub
     
    
    
    
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
    
    
    Try
     
    Dim ODS_Empty As Integer = -1
     
    Dim ODS_source As String = WebBrowser1.DocumentText
     
    Dim ODS_Time() As String = Split(ODS_source, "</span>")
     
    For i = 0 To UBound(ODS_Time)
     
    If InStr(1, ODS_Time(i), "開始時間:") >= 1 Or InStr(1, ODS_Time(i), "結束時間:") >= 1 Then
     
    ODS_Empty += 1
     
    ODS_Time(ODS_Empty) = ODS_Time(i)
     
    End If
     
    Next
     
    ReDim Preserve ODS_Time(ODS_Empty)
     
    ODS_start = Split(ODS_Time(0), ":")
     
    ODS_end = Split(ODS_Time(1), ":")
     
    Label1.Text = "開始時間:" & ODS_start(1)
     
    d2 = DateTime.ParseExact(ODS_start(1), "yyyy-MM-dd HH:mm:ss", Nothing)
     
    If d1 < d2 Then
     
    'ODS_s = ODS_start(1).ToString
     
    d1 = d2
     
    'MsgBox("11111")
     
    ForWIN7("1.1.1.1", start_MSG & ODS_start(1))
     
    
    End If
     
    
    
    
    
    Label2.Text = "結束時間:" & ODS_end(1)
     
    test += 1
     
    Label4.Text = test.ToString
     
    If ODS_end(1) = "(尚未結束)" Then
     
    ODS_check = True
     
    End If
     
    If ODS_check = True Then
     
    If ODS_end(1) <> "(尚未結束)" Then
     
    ODS_check_1 = True
     
    End If
     
    End If
     
    Catch ex As Exception
     
    Label1.Text = "開始時間:初始化....."
     
    Label2.Text = "結束時間:初始化....."
     
    Try
     
    Dim writer = My.Computer.FileSystem.OpenTextFileWriter("c:\log\" & filename & ".txt", True)
     
    writer.WriteLine(Now & ex.Message)
     
    writer.Close()
     
    Catch ex1 As Exception
     
    Dim swWriter As StreamWriter = New StreamWriter("c:\log\" & filename & ".txt", False, System.Text.Encoding.Default)
     
    swWriter.Write(Now & ex.Message)
     
    swWriter.Close()
     
    End Try
     
    End Try
     
    End Sub
     
    
    
    
    
    Private Sub ForWIN7(ByVal toIP As String, ByVal toMSG As String)
     
    
    
    Dim myIPEndPoint As New IPEndPoint(IPAddress.Any, 0)
     
    myTcpClient = New TcpClient(myIPEndPoint)
     
    
    
    Dim ServerIpAddress As IPAddress
     
    ServerIpAddress = IPAddress.Parse(toIP)
     
    
    
    Dim iPort As Integer
     
    iPort = 443
     
    Dim RemoteIpEndPoint As New IPEndPoint(ServerIpAddress, iPort)
     
    Try
     
    myTcpClient.Connect(RemoteIpEndPoint)
     
    Catch ex As Exception
     
    
     
    Exit Sub
     
    End Try
     
    
    
    
    
    
    
    Dim myNetworkStream As NetworkStream
     
    Dim myBytes As Byte()
     
    myBytes = Encoding.GetEncoding(950).GetBytes(Trim(toMSG).TrimEnd())
     
    myNetworkStream = myTcpClient.GetStream()
     
    myNetworkStream.Write(myBytes, 0, myBytes.Length)
     
    myTcpClient.Close()
     
    End Sub
     End Class



    • 已編輯 Rickyjim 2012年12月1日 上午 07:55
    2012年12月1日 上午 12:43

解答

  • 我公司要是有哪個人敢每 10 秒炸我的 Web Server ,我就直接提報對方部門主管令人提頭來見,敢不來,就提報主管會議請總經理議處。

    自家公司若不能協調,就應該內部跨部門會議提出來檢討,哪有這樣玩的?

    10 秒耶...

    這樣轟對 Server 也是負擔,也是資源損耗,包含電力、使用壽命、溫度、網路頻寬,自家公司允許你這樣玩?

    這裡面還有轟 443 耶... 內部都要跑 443 的網頁,顯然有憑證,有憑證的 Web Server 轟幾下 IT 部門就會當成惡意行為了... 就算調查非屬惡意,也不會允許,每 10 秒來一次,那以後怎樣判斷有沒有惡意入侵?全部被你的流量搞成讓人不會重視了。

    有需求,照公司內部流程走,不是搞成這樣。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已提議為解答 Alex_Lee 2012年12月1日 下午 04:58
    • 已標示為解答 璉璉Moderator 2012年12月15日 上午 09:01
    2012年12月1日 下午 04:48

所有回覆

  • 你還是先把錯誤訊息log下來再想解決辦法吧
    2012年12月1日 上午 02:50
  • 你還是先把錯誤訊息log下來再想解決辦法吧

    好的

    大概要擺個4~8小時或是更久 XDD

    2012年12月1日 上午 03:10
  • 你還是先把錯誤訊息log下來再想解決辦法吧

    歷經4小時之後
    在split出現 【索引在陣列的界限之外】
    爾後就沒有再成功過~
    重新開啟程式後
    就沒有問題了
    當下開啟正常的網頁版
    也確定網頁是正常運作的~


    • 已編輯 Rickyjim 2012年12月1日 上午 07:54
    2012年12月1日 上午 07:36
  • 這樣應該算是惡意的網站攻擊程式吧?

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月1日 上午 08:22
  • 這樣應該算是惡意的網站攻擊程式吧?

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    請大大放心

    這不是惡意程式攻擊

    單純for自家公司用

    裡面隱屏的IP都是內網IP

    所以不方便透漏

    不想麻煩AP端針對個人需求去做修改

    我用這類方式自己做外掛提醒^^

    如果要惡意攻擊的話

    我就不會在這邊討論了^^

    初階攻擊 程式碼裡面也要有不斷丟封包的程式碼

    但是裡面沒有

    我的流程很簡單

    單純讀取網頁的原始碼後 自己split出需要的字串秀出

    然後判斷字串做出提醒訊息



    • 已編輯 Rickyjim 2012年12月1日 上午 08:51
    2012年12月1日 上午 08:49
  • 你先判斷ODS_Time這個陣列長度,有2個以上才繼續處理

    2012年12月1日 上午 10:38
  • 我公司要是有哪個人敢每 10 秒炸我的 Web Server ,我就直接提報對方部門主管令人提頭來見,敢不來,就提報主管會議請總經理議處。

    自家公司若不能協調,就應該內部跨部門會議提出來檢討,哪有這樣玩的?

    10 秒耶...

    這樣轟對 Server 也是負擔,也是資源損耗,包含電力、使用壽命、溫度、網路頻寬,自家公司允許你這樣玩?

    這裡面還有轟 443 耶... 內部都要跑 443 的網頁,顯然有憑證,有憑證的 Web Server 轟幾下 IT 部門就會當成惡意行為了... 就算調查非屬惡意,也不會允許,每 10 秒來一次,那以後怎樣判斷有沒有惡意入侵?全部被你的流量搞成讓人不會重視了。

    有需求,照公司內部流程走,不是搞成這樣。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    • 已提議為解答 Alex_Lee 2012年12月1日 下午 04:58
    • 已標示為解答 璉璉Moderator 2012年12月15日 上午 09:01
    2012年12月1日 下午 04:48
  • 我公司要是有哪個人敢每 10 秒炸我的 Web Server ,我就直接提報對方部門主管令人提頭來見,敢不來,就提報主管會議請總經理議處。

    自家公司若不能協調,就應該內部跨部門會議提出來檢討,哪有這樣玩的?

    10 秒耶...

    這樣轟對 Server 也是負擔,也是資源損耗,包含電力、使用壽命、溫度、網路頻寬,自家公司允許你這樣玩?

    這裡面還有轟 443 耶... 內部都要跑 443 的網頁,顯然有憑證,有憑證的 Web Server 轟幾下 IT 部門就會當成惡意行為了... 就算調查非屬惡意,也不會允許,每 10 秒來一次,那以後怎樣判斷有沒有惡意入侵?全部被你的流量搞成讓人不會重視了。

    有需求,照公司內部流程走,不是搞成這樣。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    哈哈

    心冷大大請息怒

    讓小弟解釋一下

    小弟這隻程式已經正常運作,一小時更新一次

    關於443 port是公司內部規定的

    非小弟我

    且不是轟炸443

    在更新網頁的時候

    發現結束的字串,才會送訊息到443

    非轟炸之意

    且更新的網頁的伺服器也只是單純的Log紀錄內部網站

    不影響其他的正常運作

    有評估過^^

    2013年1月11日 上午 10:35