2

HttpRuntime.Cache を使用せずに Azure キャッシュを使用すると、エラーが発生します。

タイプ ' System.Web.Services.Protocols.LogicalMethodInfo ' をシリアル化できません。これを DataContractAttribute 属性でマークし、シリアル化するすべてのメンバーを DataMemberAttribute 属性でマークすることを検討してください。型がコレクションの場合は、CollectionDataContractAttribute でマークすることを検討してください。サポートされているその他の型については、Microsoft .NET Framework のドキュメントを参照してください。 検索した後、 「HttpRuntime.Cache はデータをまったくシリアル化しない」

というこの記事に気付きました。ASP.net 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);
}
}
4

1 に答える 1

1

System.Web.Services.Protocols.LogicalMethodInfoはシリアル化できないため、このエラーが発生します。Azureキャッシュに追加するには、オブジェクトをシリアル化して、ネットワーク経由でキャッシュサーバーに送信する必要があります。明らかに、これはシリアル化できないオブジェクトでは実行できません。HttpRuntime.Cacheインメモリデータストアです。メモリ内にあるため、オブジェクトをシリアル化する必要はありません。したがって、キャッシュされたオブジェクトがシリアル化可能かどうかは関係ありません。

于 2013-01-15T15:32:53.030 に答える