2013年5月29日 星期三

IIS中http 回應標頭設定簡介

IIS中可以依照自己需求設定Http Header,可用來定義meta或是一些設定。

如下圖所示:每個框起來的地方,其實都可以設定自己的http header。

image

繼承設定:

設定http回應標頭時,若由最上層開始設定,子層便會繼承此設定。

以最上層來說,項目類型會寫"本機"。

而以EAP\DEMO為例,項目類型就會顯示"已繼承"。

image

image

移除繼承:

在這邊的子層會繼承父層的設定,但是如果不想繼承設定的話,在右邊有移除的功能,

點擊移除就可以。

image

image

2013年5月27日 星期一

Sitefinity CMS - Part01

What is CMS?

想安裝CMS來玩,如何開始?

  • 以Sitefinity CMS 為例:
    使用Web Platform Installer,在應用程式頁籤(1)中,可以看到CMS的選單(2)。
    點擊進去後,就會看到常見的一些CMS的列表,接著選擇新增(3)系統。SNAGHTMLdea029
  • 接著按下安裝
    SNAGHTMLe169be
  • 系統協助你安裝需要裝的相關資訊
    SNAGHTMLe36c0fSNAGHTMLe3e7c3SNAGHTMLe44c21[6]SNAGHTML110171d
  • 安裝完成後會開啟設定網頁。
    • 要求輸入license。
      image
    • 系統會在App_data\Sitefinity下面產生檔案(須設定此目錄的權限)image
    • 設定資料庫
      image
    • 設定管理者帳號
      image
    • 安裝完成。

2013年5月26日 星期日

IE10 相容性問題

近期許多人反應在IE9沒問題的網頁程式,在升級IE10卻頻頻發生錯誤,重裝回IE9後又回復正常,或者使用相容性檢視也可以正常使用。
原因是因為asp.net 2.0、3.5、4.0無法辨識IE10的標頭字串。
可參考:保哥-解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題 

這邊提供一種解法:
Microsoft 在 2012/9/17 於 下午 03:23 所公佈
This issue was fixed in .NET 4.5. We are investigating supplying a fix for .NET 4.0. In the meantime, you might try using the X-UA-Compatibility http-equiv meta tag (or header) to force IE into IE9 rendering mode.
from:http://connect.microsoft.com/VisualStudio/feedback/details/755419/asp-net-4-0-and-ie10-click-on-imagebutton-in-updatepanel-produces-error-click-on-normal-button-does-not
簡單說就是使用meta的方式讓瀏覽器自動使用相容性模式。
作法1:
在網頁標頭加上
<meta http-equiv="X-UA-Compatible" content="IE=9, IE=8, IE=7, chrome=1" />
作法二:web.config上加上
<httpProtocol>
     <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=9, IE=8, IE=7, chrome=1" />
     </customHeaders>
</httpProtocol>
作法三:IIS上設定
image
image

2014.02.13補充
做了以上測試IE10解決了,但是IE11無法卻登入!!!
有人建議直接修正blowser檔:

2013年5月23日 星期四

Asp.net 網站存取權限

 

在檢測網站時,發現某個需登入後的頁面,在取得網址後就可以進入修改,這表示後台門戶大開,大大影響資安與資料的外洩。

比如說Maintain這個資料夾,是需要透過登入認證後才可以存取。

所以在web.config必須加上






  • deny:拒絕
  • allow:允許
  • users="?":匿名使用者
  • users="*":所有使用者
  • 上面的意思就是拒絕匿名使用者(沒有登入就沒有存取權限)

這個config檔可以放置在maintain目錄下,這樣權限只會限制在此目錄中。


如果是放在最外層的web.confg中,就會讓整個網站都受限制。


若放在最外層也可以改寫成









配合Forms驗證





當你網址是需要登入才可以使用,這裡就會幫你把程式導到登入頁面。


參考:


ASP.NET的驗證與授權機制

Google I/O 2013 觀後筆記Part02

2.WebP and VP9

WebP是Google2010就提出的影像壓縮技術,在近期表現程度逐漸可以取代JPEG。

在會議中比較了現在WebP與JPEG圖檔的比較,相類似的影像品質,WebP容量比JPEG少30%。

再來就是視訊壓縮VP9的部分,硬是比H.264少60%,看來Google對視訊這塊很上心。

3.Google 推出 Chrome for Mobile 新 Beta 版,重點在於能夠為用戶壓縮數據用量,他們表示可以為用戶縮減數據用量 46%!

4.Google Play Music All Access

Google音樂平台,包月,目前僅美國開放。

5.Google Play Game Services: 主要就是和 Apple 的 Game Center 打對台。

6.Google+更新,正面迎擊FaceBook。

7.Google Map更新

8.Android Studio:Android 開發IDE

9.Google Wallet:電子錢包

  • 新增Gmail匯款功能:Gmail附件會多個$的符號,使用者可以透過gmail匯款。

10.Android 版 Google Now 的更新:

  • 新版中加入了提醒(Reminders)功能,可以幫助用戶更好地去完成 to-do 清單中所列出的事情。

JSDC 2013 保哥:效能調校與常見陷阱 觀後筆記

JavaScript 開發實戰:效能調校與常見陷阱 (2013 JSDC.tw)

1.善用瀏覽器的開發者工具

  • 若要做比較專業的網頁動作或封包分析,之前會使用fiddler2這套軟體。
  • 瀏覽器中的工具其實也可以做到蠻專業的分析。
  • 使用Chrome開發人員工具(F12)中的Console來進行javascript測試

    image

 

2.jsPerf:

  • http://jsperf.com
  • 功能:測試javascript片段效能。
  • 測試時,系統會跑很多次javascript片段來測效能。

image

 

3.Object與Array該選哪一個?

  • Object:無順序陣列、需要用字串當索引的情境
  • Arrray:有順序的集合、需要用數字當索引的情境

4.使用Object技巧:

  • 基本原則:
    • 使用建構子函式(Constructor)建立物件,不要用Object.create()建立物件
    • 不要使用過多的繼承,減少prototype chains的層級。

5.使用Array技巧:

  • 基本原則:
    • 使用Array Literals建立陣列,ex: var a={1,2,3,4};
    • 在陣列中使用一致的型別(Type),ex:會需要做轉型所以效能會減低。
    • 陣列索引最好能連貫(元素之間不要中空)
      • ex:{1,/*洞*/,3},若array[0]如果不見,效能會掉2%左右。

6.優化javascript記憶體使用效率:

  • 提升garbage collector效率:
    • 全域變數不會自動GC,直到換頁或重載,否則記憶體用不釋放。
      • var myGlobalNamespace={};
    • 盡量在fuction內使用var宣告區域變數
      fuction HelloWorld()
      {
      var str = 'test';
      alert(str);
      }

7.JavaScript的Scope觀念:



  • 變數何時會列入GC範圍?
    image

  • 利用匿名函式降低使用全域變數的機會
    image

8.使用window.setTimeout的注意事項



  • 無法GC的情況(De-referencing):setTimeout是傳function

9.DOM快取



  • 將jquery物件cache起來使用,jquery重覆搜尋物件相對效能會比較低。

10.關於型別轉換



  • javascript是一種動態型別或弱型別。

Google I/O 2013 觀後筆記Part01

1.Hangouts

最近在Gmail中,發現原先發起視訊通話的圖示,換成了發起Hangouts。

原來這是google在這次新推出的傳訊軟體,整合了 Google Talk、Google+ messager 等等服務。

SNAGHTML1c99d31

點擊之後,跳出了安裝視窗。

image

SNAGHTML1cbc21f

SNAGHTML1cc1be2

安裝完成後,點選加入。

image

便開啟了視訊通話的介面,就可以開始進行視訊通話。

SNAGHTML1ce6753

如果有使用Android 系統的手機,在進行 Google Talk的更新後,結果發現App換了另外一個名稱也換了圖示。

 

image

進入後會驗證電話。

imageimage

若有使用多個google帳號,會讓你挑選與那個帳戶建立關聯。

進入後通訊錄的畫面如下,可以找個朋友進行對話。

imageSNAGHTML1c41e13image

視訊通話:手機與網頁互相測試。

image

To Be Continue…

2013年5月20日 星期一

05_Model建置03

使用傳統ADO.NET的方式建立。以下為取得資料的方式。
namespace MvcApplication1.Models
{    
        public class CustomerDataContext    {  
            List<customer> GetAllCustomerData(){         
                List<customer> customers = new List<customer>();         
                SqlConnection conn = new SqlConnection("initial catalog=northwind; integrated security=SSPI");
                SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn);
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (reader.Read())
                {
                    Customer customer = new Customer();
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        PropertyInfo property =
                            customer.GetType().GetProperty(reader.GetName(i));
                        property.SetValue(customer,
                            (reader.IsDBNull(i)) ? "[NULL]" : reader.GetValue(i), null);
                    }                
                    customers.Add(customer);
                }          
                reader.Close();           
                return customers;}    
        }
  }

Controller中的寫法:
public ActionResult Customers(){
    List<models.customer> customers = Models.CustomerDataContext.LoadCustomers();
    return View(customers);
}

參考資料:

2013年5月18日 星期六

04_Model建置02

透過Entity Framework取得資料庫資料。

namespace Project.Models
{
public class CustomerDAL
{
///
/// 取得本機驗證碼
///

///
public List<ustomer> GetAllCustomerData()
{
using (myDBEntities obj = new myDBEntities())
{
try
{
//使用linq語法來取得(篩選)資料
var query = (from c in obj.Customer
select c);


return query.ToList<Customer>();
}
catch (Exception ex)
{
return "";
}
}
}
}
}


Controller中的寫法:


public ActionResult Customers()
{
List<models.customer> customers = new CustomerDAL().GetAllCustomerData();
return View(customers);
}

2013年5月17日 星期五

03_Model建置01

一般常見的方式使用Entity Framework來建立Model。

image

新增後會進入設定精靈,開始選項有兩種:

1.從資料庫來建立Entity。

2.建立空的Model,之後再讓使用者自行建立相對應的Entity。

在此以1為例。

image

設定連線字串,

選擇No:不含敏感資料

選擇Yes:含敏感資料

image

設定要匯入Model的相關預存、Table、View等,點擊完成後,便會產生對應的資料。

image

點擊EDMX檔案,即可檢視產生的Entity。

設定方法類似TypedDataSet,一樣可以新增欄位等。

image

2013年5月16日 星期四

02_建立MVC專案

開啟VS2012,新增專案,選擇ASP.NET MVC 4 Web應用程式。

image

建立方案後,MVC Web應用程式架構如下:

1.Controllers
2.Models
3.Views

存在相對應目錄來處理每層要做的事情。

SNAGHTML11efe7f

雖然預設MVC Web專案已經把架構目錄都規劃好,但是為了專案彈性,
可以試著把Models獨立成一個專案。

image

再來架構完成後就可以進行Models的設定與建置。

2013年5月15日 星期三

01_MVC概觀

 

層次:

  • Model:模型
  • View:檢視
  • Controller:控制器

clip_image001[1]

ASP.NET:

  • Model:資料模型,資料處理。
    • 常用:
      • Entity Framework
      • ADO.NET
      • Linq to SQL
      • Typed DataSet...etc
  • Controller:控制器,Page和Control
  • View:檢視,UI展示

參考資料: 維基百科