2007年8月29日 星期三

SecurityAction

SecurityAction 的 enum 值真是怪,不知道是誰取的名 SecurityAction.RequestMinimum:要求assembly至少要有這個權限。如果assmebly 沒有符合這個要求,會產生 Security.Policy.PolicyException。名字應該改成 RequireMinimum 才對。 SecurityAction.RequestOptional:拒絕所有不在SecurityAction.RequestMinimum 及SecurityAction.RequestOptional 的權限。如果不符合,並不會產生 exception。名字應改成 RefuseAllExcept 才對。 SecurityAction.RequestRefuse:正面列出不要的權限。也就是說,如果有這個權限,也拒絕執行。如果不符合,並不會產生 exception。例如我確定不要連sql server,應該在 SqlClientPermission 上設 SecurityAction.RequestRefuse。

2007年8月23日 星期四

Using themed css files requires a header control on the page. (e.g. )

在使用 asp.net 2.0 時,在 web.config 中,使用了theme
<page theme="Blue" ....>

而且此主題中,也使用了 css
一般的網頁正常,但一些網頁就不行了。

如 showImage.aspx 的網頁,使用 Response.OutputStream 來輸出圖片
程式片斷如下
Stream objOutputStream = Response.OutputStream;
if ((strContentType != null) && (strContentType.Trim().Length !=0))
{
Response.ContentType = strContentType;
}
Response.AddHeader("Content-Disposition", "inline;filename=" + strFilename);
objOutputStream.Write(bytes, 0, bytes.Length);

這樣的程式,在VS2003 是正常的。但在 VS2005開發過後,會出現如下的錯誤。

Using themed css files requires a header control on the page. (e.g. <head runat="server" />)

原來,為了讓 themed css 能發揮作用,網頁的 header 必須 runAt="server" 這樣asp.net 才能動態的塞入css 的link
但像純顯示圖片的網頁,就不適用了。

解法方法如下:

1 顯示圖片的網頁,改用 httpHandler ==>大工程
2 顯示圖片的網頁,改用 ashx ==> 也是大工程
3 將ShowImage.aspx 的主題設為空白!!! <%@Page Theme=""> 就可以了。

前兩個方法其實還好,但是網頁名稱由 ShowImage.aspx 改成 ShowImage.hahah 或 showImage.ashx ,都要使用 find and replace 大法。

第三個方法就很吊詭了,Theme一定要設成空白才行,
設成不存在的theme 會出錯Theme 'hahaha' cannot be found in the application or global theme directories.。 EnableTheming="false" 是沒有用的

真是怪

2007年8月21日 星期二

ConfigurationManager and WebConfigurationManager

兩者是相等的。 WebConfigurationManager 只適用於 asp.net,而ConfigurationManager 適用於非asp.net 的應用程式。 兩者不同的地方有三:
  1. WebConfigurationManager 有 GetWebApplictionSection方法,用來取得 web.config 的ConfigurationSection。此法於功能上相同於 ConfigurationManager 的 GetSection 方法。
  2. ConfigurationManger 的 OpenMappedExeConfiguration 方法等同於 WebConfigurationManager 的 OpenMappedWebConfiguration
  3. ConfigurationManger 的 OpenExeConfiguration 方法等同於 WebConfigurationManager 的 OpenWebConfiguration

2007年8月14日 星期二

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

將 VS2003 的asp.net 應用程式migrate 到 VS2005 web application 後,有些原有可以執行的網頁,變的不能執行了 錯誤如下 The Controls collection cannot be modified because the control contains code blocks (i.e. ). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. ).Source Error: Line 157: // Line 158: InitializeComponent(); Line 159: base.OnInit(e); Line 160: }Source File: C:\Projects\BankPro\EI\Web\Web.V1.0.7\EInvoiceSolution\EInvoice2\Profile\CompanyEdit.aspx.cs Line: 159 為什麼呢?MS宣傳的太好了,但現實往往是殘酷的。 原來我在網頁中的client javascript ,使用了 <%=%>,如下 function setField() { var strUrl = "InvoiceDisplayFieldSetting.aspx?oid=<%=OID%>"; window.showModalDialog(strUrl,"setField", "dialogWidth:400px;dialogHeight:630px;center:1;scroll:0;help:0;status:0;resizable=0"); } 在 html 中的不會有問題, 但使用了<head runat="server"> 後, client side javacript 就不能使用 解法是override OnInit() 如下 override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); Page.DataBind(); } 然後在 client side javacript ,改用 <%# OID%> 大功告成

2007年8月13日 星期一

Dead Locka handling At SQL Server 2005


終於又碰到了Dead locks了。這次,還好是在Sql 2005 上遇到的,比2000來說,簡單許多。
首先,將Sql 2005 profiler的 filters 設好,如附圖。
然後,跑程式。哈哈,就找到了 dead lock 的key lock(通常是table 的 primary key),及造成dead locks 的 process Id ,sql 語法等。使用 Write Evnet Data 將dead lock graph 寫到一個 xml 後再觀看之,可得到更為詳細的資料。
這是我第一次找到 dead lock 及處理完畢。

2007年8月9日 星期四

web deployment projects

可於 http://msdn2.microsoft.com/en-US/asp.net/aa336619.aspx 下載。

其功能,相當於使用 aspnet_compiler.exe 及使用 aspnet_merge.exe ,但是有GUI界面。

可惜,我習慣使用 web application project 的模式開發 asp.net。而web deployment projects只適用 web sites

2007年8月6日 星期一

Cannot create/shadow copy 'xxx' when that file already exists.

使用 VS2005 sp1 開發程式時,常常發生如標題的錯誤。 可是,只要再等個30秒,1分鐘,再執行網頁,就可以了。 真是奇怪。 原來,在 vs2005 sp1 上,增加上 copy on write 的技術,可是在xp 上,好像不太管用。 解法: 在 web.config 上設定一下,就可以了 。 不過呢,使用 VS2005 build asp.net 應用程式時,這樣的設定又會出現 vs2003 常見的問題 Error 749 Unable to copy file "obj\Debug\xxx.dll" to "bin\xxx.dll". The process cannot access the file 'bin\BankPro.WEB.EInvoice.dll' because it is being used by another process. EInvoice2 這就了解了為什麼vs2005 sp1有這的設定了

Share with Facebook