gpt4 book ai didi

c# - IIS StackOverflow 异常

转载 作者:太空狗 更新时间:2023-10-29 20:40:13 26 4
gpt4 key购买 nike

这是同一个问题的另一个变体,其中在 IIS 下运行时由于 256K 堆栈大小而发生 StackOverflow 异常。这个问题不是什么新鲜事,已经被问过好几次了(herehere)

我的问题有点不同。当客户端请求数据并且在 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 的线程中执行相同类型的工作?

谢谢!

最佳答案

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

关于c# - IIS StackOverflow 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com