2013-01-15 73 views
2

我得到的錯誤,當我用天藍色的緩存,但不使用HttpRuntime.Cache:爲什麼無法在Azure緩存中序列化System.Web.Services.Protocols.LogicalMethodInfo?

類型「System.Web.Services.Protocols.LogicalMethodInfo」不能被序列化。考慮使用DataContractAttribute屬性標記它,並使用DataMemberAttribute屬性標記要序列化的所有成員。如果類型是一個集合,請考慮使用CollectionDataContractAttribute來標記它。有關其他支持的類型,請參閱Microsoft .NET Framework文檔。

搜索後,我注意到這篇文章,說
What is the default serialization used by the ASP.net HttpRuntime.Cache
示例代碼「HttpRuntime.Cache完全不序列化數據」:

protected void Page_Load(object sender, EventArgs e) 
{ 
List<myclass> items = new List<myclass>(); 
MyClass item1 = new MyClass() { ID = 1 }; 
items.Add(item1); 

HttpRuntime.Cache.Insert("test1", items); //working 

DataCache cache = new DataCache("default"); 
cache.CreateRegion("reg"); 

cache.Put("test2", items, "reg");//error 
} 

} 

public class MyClass 
{ 
public MyClass() 
{ 

Type myType = typeof(MyService); 
MethodInfo myMethodInfo = myType.GetMethod("Add"); 
_log = new **LogicalMethodInfo**(myMethodInfo); 
} 
public int ID { get; set; } 
public **LogicalMethodInfo** _log; 
} 

public class MyService 
{ 
public int Add(int xValue, int yValue) 
{ 
return (xValue + yValue); 
} 
} 
+0

請學習使用markdown –

回答

1

你得到的是錯誤的,因爲System.Web.Services.Protocols.LogicalMethodInfo不可序列化。爲了被添加到Azure緩存中,對象必須被序列化並通過網絡發送到緩存服務器。顯然這不能用不可序列化的對象來完成。 HttpRuntime.Cache是內存中的數據存儲。因爲它在內存中,所以不需要序列化對象,因此不關心緩存對象是否可序列化。

相關問題