ASP.NET Session 遇到問題

2013年5月27日 星期一

今天同事遇到使用Session發生的錯誤,錯誤訊息如下:

無法序列化工作階段狀態。在 'StateServer' 和 'SQLServer' 模式中,ASP.NET 將序列化工作階段狀態物件,因此不允許無法序列化的物件或 MarshalByRef 物件。在 'Custom' 模式中,自訂工作階段狀態存放區執行類似的序列化作業時,也會有同樣的限制

神奇的是在他本機上不會遇到,但在測試機上會出錯。

查詢後原來ASP.NET的Session是除了Server外還可以存在其他地方,如下方說明:

每個選項是由 SessionStateMode列舉型別中的值識別。 下列清單描述可用的工作階段狀態模式:

  • InProc 模式,此模式會將工作階段狀態存放在 Web 伺服器的記憶體中。 這是預設值。

  • StateServer 模式,此模式會將工作階段狀態儲存在稱為 ASP.NET 狀態服務的個別處理序中。 這樣可以確保工作階段狀態在 Web 應用程式重新啟動時保留下來,並且讓 Web 伺服陣列中的多個 Web 伺服器都能夠使用工作階段狀態。

  • SQLServer 模式,此模式會將工作階段狀態儲存在 SQL Server 資料庫中。 這樣可以確保工作階段狀態在 Web 應用程式重新啟動時保留下來,並且讓 Web 伺服陣列中的多個 Web 伺服器都能夠使用工作階段狀態。

  • Custom 模式,此模式可讓您指定自訂儲存提供者 (Provider)。

  • Off 模式,此模式會停用工作階段狀態。

參考來源:http://msdn.microsoft.com/zh-tw/library/ms178586(v=vs.100).aspx

 

會發生錯誤的那台Session模式為:StateServer,但卻沒有序列化(Serializable)

解決方法:自訂類別加一個Serializable屬性標記[Serializable]。

[Serialzable]
public class getData
{
//取得資料
}




延伸閱讀:



1.在 ASP.NET 網站使用 Session 時,常常因為 web.config 修改或更新 Bin\ 目錄下的 dll 而導致 Session 消失,Session 常常消失"也挺惱人的,不是導致突然被自動登出,就是發生非預期的 Exception ... 等。



可以參考保哥這篇"如何讓 ASP.NET 使用 Session 資料時不要再自動消失"



2."觀察ASP.NET State Server的資料傳輸時機"



3.web.config SessionState配置詳解

Read more...

json資料處理

2013年5月8日 星期三

Dictonary<string,string>資料處理回傳

{"d":{"0":"第一項","1","第二項","2":"第三項"}}

jQuery.ajax({
type:"POST",
url:"xxx.asmx/getxxx",
cache:false,
async:false,
contentType:"application/json;charset=utf-8",
success:function(dt){
$(dt.d).each(function(i,val){
$.each(val,function(k,v){
alert("key:" + k + "value:" + v);
});
});
}
})


通常取回來的資料用dt.d.length就可取到資料長度,但這個例子是取不到的



必需要用$(dt.d).each來取得,至於為什麼呢?在找時間來查查看

Read more...

解決FireFox不支援event.keycode方法

偵測鍵盤上key入判斷,通常在ie上用window.event,但是這個方法在FireFox上卻不支援

這就是開發網頁工程師的困擾了,為什麼這麼多瀏覽器不統一規格呢?

就連IE6~10,各版本會有不相容的問題..Orz

回歸正題啦,加入一下判斷就可以啦!!

 

function onKeyPressBlockNumbers(e)
{
var key = window.event ? e.keyCode : e.which;
var keychar = String.fromCharCode(key);
reg = /\d/;
return !reg.test(keychar);
}

Read more...

啟用方案總管中追蹤現用項目方法

2013年5月7日 星期二

 

 

開啟追蹤現有項目工具=>選項=>專案和方案=>勾選在方案總管中追蹤現用項目 image_20

Read more...