IIS StackOverflow异常

Joh*_*ell 7 c# stack-overflow iis wcf

这是同一问题的另一个变体,其中由于在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 );
}
Run Code Online (Sandbox Code Playgroud)

这模拟了StackOverflow异常,就像在IIS中一样.当我将传递给Thread的构造函数的stackSize参数更改为1MB时,它工作正常......

我的问题是如何在WCF服务方法中执行此操作?换句话说,在我的WCF服务方法中,我没有显式创建序列化程序并调用WriteObject.如何/在哪里可以在我可以控制stackSize的线程中进行同样的工作?

谢谢!

Bri*_*sen 1

您可以通过更改可执行文件的 PE 标头来修改默认堆栈大小。将 editbin.exe 与 /stack 参数一起使用。请参阅http://msdn.microsoft.com/en-us/library/35yc2tc3(v=vs.80).aspx