这是同一问题的另一种变体,在 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的线程中做同样的工作?
谢谢!