2012-06-19 12 views
7

これは、IISで実行しているときに256Kスタックサイズの結果としてStackOverflow例外が発生する同じ問題のさらに別の変形です。この問題は何も新しいものではなく、何度か尋ねられました(herehereIIS 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); 
} 

これは、同じようにStackOverflowの例外をシミュレートIISで。スレッドのコンストラクタに渡されたstackSizeパラメータを1MBに変更すると、正常に動作します...

私の質問はどうやってWCFサービスメソッド内でこれを行うことができますか?つまり、私のWCFサービスメソッドでは、シリアライザを明示的に作成せずにWriteObjectを呼び出すことになります。どのように/私はstackSizeを制御することができるスレッドで、この同じ種類の作業をどこでやり遂げることができますか?

ありがとうございます!

答えて

1

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

+0

すぐにお返事ありがとうございますが、コードでこの問題を解決したいと思います。私は/ stackスイッチでeditbin.exeを試しましたが、w3wpアプリケーションがsystem32フォルダ内にあるので、アクセス権の問題に遭遇しました。私はファイルを更新できませんでした。また、IIS上にパッチや更新プログラムをインストールする場合は、変更が上書きされます。プログラムでどのように解決できるかについての考えはありますか? –

+0

@JohnRussell:スレッドの作成を変更できないという印象を受けました。その場合、私が知っている唯一の選択肢は、画像を変更することです。おそらく、あなたは自己ホスティングを行い、IISの代わりにそのバイナリを変更するでしょう。 –

+0

私はスレッドの作成を変更することができるかもしれませんが、私はちょうどIISがホストするプロセスでどのように取得されたのかわかりません。シリアライザを作成し、WriteObject()を呼び出す明示的なステートメントはありません。 –

関連する問題