Jen

729部門分享會內容

主要是分享三個部分:

一、ASP.NET MVC Routing 的運作流程。

這半年阿健在公司做了2個偏官網型的案子,都使用ASP.NET MVC 1.0作為solution,由於MVC在URL呈現部分與以往ASP.NET 3.5、2.0,甚至ASP..etc會有些不一樣,運作原理也不太一樣。

像緻妍的產品列表頁:http://www.reacheer.com.cn/Product

有同事就會好奇問怎麼沒有副檔名,或者是在google 分析設定路徑上會有些疑問,所以阿健就特別針對這部分跟其他同事分享一下,以後的路應該會比較好走 @@ 嘖

請看此圖(裁於某份pdf)

2010-07-30_165845

當一個http request進到IIS時,IIS會先檢查這個URL要求是否有實體檔案存在,如果存在才會把這個request的所有權交到.NET Framework,如果你在IIS針對MVC設定ISAPI時沒有把「檢查該檔案是否存在」取消掉的話(如下圖),那像這種http://www.reacheer.com.cn/Product連結是永遠會被IIS擋在門外,進不到.NET Framework的。

2010-07-30_170512

當IIS把request的所有權交給.NET Framework後,.NET Framework還會再檢查一次request的URL,如果有實體的檔案存在,他就直接response那個實體的檔案,不管你是aspx、flv、css、js…etc。

如果沒有實體的檔案存在,他就會解析URL,像http://www.reacheer.com.cn/Product就會被解析,.NET Framework就會知道這個要求就是Product 這個controller,也知道是哪個Action,跑完邏輯之後就吐回一個View給你。

 

一、Http Long Polling 後端的實作範例(asp.net)

Long Polling就是現階段facebook及plurk都有在用的一個技巧,叫做延長要求時間。簡單來說呢,就是丟1個Request到server,然後把timeout設很長,假設300秒, 只要server 資料沒變,request就等300秒,等他300秒之後回到client,再發1個request到server去再等300秒,一直loop;

如果這300秒以內有任何變動,就馬上Response到client,client接到後馬上又送一個request到server去,一直loop。

簡單的程式碼如下。

後端(ASP.NET MVC)

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetData()
{
    //幾秒做一次資料庫檢查
    int seconds = 30;
    //原始數量
    int oCount = testService.Count();

    for (int i = 0; i < seconds; i++)
    {
        if (Response.IsClientConnected)
        {
            //最後一次了,timeOut
            if (i == 14)
            {
                return Json(new
                {
                    RS = "timeout",
                    content = ""
                });
            }
            else
            {
                int nCount = testService.Count();
                if (nCount != oCount)
                {
                    return Json(new
                    {
                        RS = "OK",
                        content = nCount.ToString() + " , "
                    });
                }
            }
            //平均 0.5秒檢查一次
            System.Threading.Thread.Sleep(500);
        }
    }
    return Json(new
    {
        RS = "OK",
        content = "很好"
    });
}

前端 (jQuery)

<script type="text/javascript">
function longPolling() {
    $.ajax({
        type: "POST",
        url: "/LongPolling/GetData", // one minute
        cache: false,
        dataType: 'json',
        success: function(res) {
            //alert(res.RS);
            if (res.RS == "OK") {
                $('#DebugLabel').append(res.content);
                longPolling();
            }

            if (res.RS == "timeout") {
                $('#DebugLabel').append(res.content);
                longPolling();
            }
            //alert('again');
            //longPolling();
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            $('#DebugLabel').html(textStatus);
        }
    });
}



$(function() {
    longPolling();
});

有進階版的可以參考

http://www.codeproject.com/KB/ajax/CometSql.aspx

 

 

一、米迪大搬風 !!?

分享一下大學做的東西咩。

主畫面如下:2010-07-30_172317

匯入一個midi檔,解析他的基本元素。2010-07-30_172519

匯入一個midi檔,改變他的風格。2010-07-30_172550

隨機創作一首midi曲子。2010-07-30_172603

要播放的話,記得加到播放清單。

2010-07-30_172618

就可以播放囉2010-07-30_172632

以前寫過的101篇心得文(也就只有1篇)

http://www.wretch.cc/blog/leehom59/8926914

 

感恩奴力

0 意見: