2013年9月30日 星期一

HEAP CORRUPTION DETECTED

最近在Visual Studio 2010 上開發了一個工具,
在 detete 一塊記憶體的時候跳出了一個錯誤訊息

找了幾天沒發現原因, 後來靠google大神才知道
這個錯誤在debug mode的時候才會出現,
release mode不一定會出現
原因是debug mode在malloc時會多alloc一些memory
以便檢查是否有寫過頭的情況發生

其實在錯誤訊息舊有提到 "CRT detected that the application wrote to memory after end of heap buffer"

後來去trace 後發現, vc在 alloc 的這段memory前後都放了一些檢查碼來check是否有寫過頭的現象發生, 如果在debug mode有出現這些訊息而release mode沒有出現的時候
就不要不放在心上, 不然哪天程式冒出不知明原因的錯誤就不好找了

ps: CRT 指的應該就是 C RunTime lib

2013年9月16日 星期一

IIS6&7 handler 開發

最近試著寫了一個簡單的handler for iis6&7
紀錄一下免得以後忘了

1. Visual Studio 新增一個 MyIIS7Handler 類別庫的專案

2.新增System.Web 的參考
3.新增以下的Code

namespace MyIIS7Handler
{
    public class MyHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            DateTime dt;
            dt = DateTime.Now;

            context.Response.Write(String.Format("<h1>{0}</h1>",dt.ToLongTimeString()));
        }
    }
}

4.將程式編譯好放到IIS Server上(iis7的設定方式所參考的網頁都有說明, 這裡僅記錄iis6)
先將dll 放到網站的bin目錄下


5.網站的Web.Config 新增以下設定於<system.web>內
目的是讓副檔名是tm的檔案都透過我們的handler來執行

        <httpHandlers>
   <add verb="*" path="*.tm" type="MyIIS7Handler.MyHandler"/>
        </httpHandlers>

6.還要設定副程式讓aspnet_isapi來執行我們的 dll

參考網頁:
How To Create an ASP.NET HTTP Handler by Using Visual C# .NET
INFO: ASP.NET HTTP 模組與 HTTP 處理常式概觀
Migration of ASP.NET app from IIS6 to IIS7 (7.5)
Develop a Native C\C++ Module for IIS 7.0
Developing a Module Using .NET
Developing IIS7 modules and handlers with the .NET framework