8

これは、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 を制御できるスレッドで、これと同じ種類の回避策をどのように/どこで行うことができますか?

ありがとう!

4

1 に答える 1

1

実行可能ファイルのPEヘッダーを変更することで、デフォルトのスタックサイズを変更できます。/stack引数を指定してeditbin.exeを使用します。http://msdn.microsoft.com/en-us/library/35yc2tc3(v=vs.80).aspxを参照してください

于 2012-06-19T21:54:57.777 に答える