我做一个简单的文件上传带进度条的程序,查了很多资料说要用HttpModule,所以我写了一个,在StartRequest中有一下代码:
if (!hwr.IsEntireEntityBodyIsPreloaded())
{
    int m_bufferSize = 655350; //640K for test.
    int m_readSize = 0;
    byte[] m_readBuffer = new byte[m_bufferSize];
    ha.Context.Response.Write(DateTime.Now.ToString() + " :3<br/>");
    while ((length - m_currentPoint) >= m_bufferSize)
    {
        DateTime dt = DateTime.Now;
        if (!ha.Context.Response.IsClientConnected)
        {
            break;
        }
        m_readSize = hwr.ReadEntityBody(m_readBuffer, m_bufferSize);
        m_currentPoint += m_readSize;
    }
    m_readBuffer = new byte[length - m_currentPoint];
    if (!ha.Context.Response.IsClientConnected)
    {
        return;
    }
    m_readSize = hwr.ReadEntityBody(m_readBuffer, m_readBuffer.Length);
    ha.Context.Response.Write(DateTime.Now.ToString() + " | " + length + " CurrentPoint :: " + m_currentPoint + " & " + m_readSize + "m_readBuffer.Length" + m_readBuffer.Length + "<br/>");
}
ha.Context.Response.Write(DateTime.Now.ToString() + " :4<br/>");在EndRequest中有以下代码:
HttpApplication ha = sender as HttpApplication;
ha.Context.Response.Write(DateTime.Now.ToString() + " :End<br/>");结果经常出现StartRequest函数中最后的打印时间与EndRequest函数中打印的时间相差60,很奇怪。
8/5/2006 6:50:31 PM :4 
8/5/2006 6:51:31 PM :End我看其他开源的代码也差不多,为什么我的会出现这种问题,而且去掉ReadEntityBody代码行就一切正常,请各位大侠指点一下,真的快想疯了。

解决方案 »

  1.   

    换成一个application来记录???!!!楼上的你只是什么意思?
      

  2.   

    HOW TO:建立及移除自訂事件記錄檔  您可以利用 EventLog 類別,在本機或遠端電腦上建立自訂事件記錄檔。如果當元件將項目寫入預設的應用程式記錄檔時,想要用比所允許更粗略的方法來組織項目,您可以建立一個自訂記錄檔。例如,假設您有一個將項目資訊寫入到事件記錄檔,名為 OrderEntry 的元件。而您想要備份,並且讓這些項目的保留時間比應用程式記錄檔內其他項目的保留時間還長。您要建立一個名為 OrdersLog 的自訂記錄檔,並登錄元件以便將項目寫入至該記錄檔,而不要以登錄元件寫入應用程式記錄檔。這樣一來,您所有的順序資訊都會儲存在同一地方,並且即使應用程式記錄檔內的項目清除掉也不會受到影響。 您可以間接使用 CreateEventSource 方法來建立自訂記錄檔。此方法會建立一個新的來源並讓您指定要寫入的記錄檔。假如您所指定要寫入的記錄檔不存在,系統會自動建立一個自訂記錄檔,並且將元件登錄為該記錄檔的來源。注意事項 
    移除自訂記錄檔的方式和移除任何記錄檔相同,可藉由呼叫 Delete 方法完成。如需詳細資訊,請參閱 HOW TO:刪除事件記錄檔。
     最重要的是,要注意建立事件記錄檔和建立 EventLog 元件執行個體的差別。使用 CreateEventSource 方法時,您是在 Windows 裡建立一個新的自訂事件記錄檔,而不是在專案或應用程式裡建立一個元件。當您建立 EventLog 元件執行個體時,是在專案裡建立一個參考外部事件記錄檔的元件。您可以藉由 [事件檢視器] 來檢視使用 CreateEventSource 方法所建立的事件記錄檔,但無法檢視元件執行個體。 注意事項 
    一般而言,會在安裝應用程式期間建立新的事件的來源。這可讓作業系統有時間重新整理已登錄事件來源的清單及其組態。如果作業系統並未重新整理其事件來源清單,而您嘗試要用新的來源寫入事件,則寫入作業將失敗。如果不可能在安裝時建立來源,則請設法在第一次寫入作業之前建立來源,也許在應用程式初始化期間即可建立。如果選擇採用這種方式,就一定要在電腦上用系統管理員權限,執行初始化程式碼。您必須要有這些權限,才能建立新的事件的來源。
     您可以在 [伺服器總管] 或 Windows 2000 [電腦管理] 視窗中,檢視自訂記錄檔。如需詳細資訊,請參閱 HOW TO:在伺服器總管中使用事件記錄檔或 HOW TO:啟動事件檢視器。您必須在遠端電腦上有適當的存取權限,才能建立及刪除記錄檔。如需詳細資訊,請參閱事件記錄檔安全性細節。安全性注意事項 
    建立事件記錄檔時,請注意資源可能已經存在。另一個也許是惡意的處理序,可能已經建立資源,而且擁有其存取權限。將資料置於事件記錄檔時,其他處理序可以使用該資料。如需現有事件記錄檔的詳細資訊,請參閱 HOW TO:判斷事件記錄檔是否存在。
     若要建立自訂事件記錄檔
    呼叫 CreateEventSource 方法,並指定您想建立之記錄檔的來源字串及名稱。 注意事項 
    如果您將記錄檔名稱指定為 null (" "),則它會預設值為 Application 記錄檔。這樣不會建立新的記錄檔,但是會將特定來源登錄給應用程式記錄檔。如果您建立新的記錄檔,則在判斷名稱是否為唯一時只會評估前八個字母。 
     下列範例會說明如何在本機電腦上建立一個名為 MyNewLog 的自訂記錄檔。此程式碼會假設 System.Diagnostics 命名空間已有 Imports 或 using 陳述式存在: Visual Basic 複製程式碼EventLog.CreateEventSource("ApplicationName", "LogName")C# 複製程式碼System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "LogName");J# 複製程式碼System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "LogName");
    若要在遠端電腦上建立自訂事件記錄檔,請將電腦名稱指定為第三個參數。下列程式碼示範一個範例。 Visual Basic 複製程式碼Dim creationData As New EventSourceCreationData("ApplicationName", "LogName")
    creationData.MachineName = "ServerName"
    EventLog.CreateEventSource(creationData)C# 複製程式碼System.Diagnostics.EventSourceCreationData creationData = new
        System.Diagnostics.EventSourceCreationData("ApplicationName", "LogName");
    creationData.MachineName = "ServerName";
    EventLog.CreateEventSource(creationData);J# 複製程式碼System.Diagnostics.EventSourceCreationData creationData = new 
        System.Diagnostics.EventSourceCreationData("ApplicationName", "LogName");
    creationData.set_MachineName = "ServerName";
    EventLog.CreateEventSource(creationData);
      

  3.   

    我的意思是说你在开始会话的时候通过GUID给这个会话创建一个Application,然后再记录时间,再比较看看。