これは、IIS で実行中に 256K のスタック サイズの結果として StackOverflow 例外が発生する、同じ質問のさらに別のバリエーションです。この問題は新しいものではなく、何度か質問されています (こことここ)
私の質問は少し異なります。クライアントがデータを要求し、IIS 7 で実行されている WCF サービスがかなり大きなオブジェクト グラフをシリアル化しようとすると、例外がスローされます。連載中に実際に発生する
スタック サイズが制限されたスレッドで取得/シリアル化ルーチンを実行することで、開発環境で問題を簡単に再現できます。
static void Main(string[] args)
{
Thread t = new Thread(DoWork, 262144);
t.Start();
t.Join();
Console.ReadLine();
}
private static void DoWork()
{
var dataAccess = new DataAccess();
var data = dataAccess.LoadData();
var serializer = new DataContractSerializer(typeof(List<Data>), null, int.MaxValue, false, true, new DataContractSurrogate());
var memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, data );
}
これにより、IIS と同様に StackOverflow 例外がシミュレートされます。スレッドのコンストラクターに渡される stackSize パラメーターを 1MB に変更すると、正常に動作します...
私の質問は、WCF サービス メソッド内でこれを行うにはどうすればよいですか? つまり、私の WCF サービス メソッドでは、明示的にシリアライザーを作成して WriteObject を呼び出しません。stackSize を制御できるスレッドで、これと同じ種類の回避策をどのように/どこで行うことができますか?
ありがとう!