【发布时间】:2015-07-22 23:21:48
【问题描述】:
在将视图发送到客户端后,我的 .NET MVC 项目中出现“System.StackOverflowException”。视图正确呈现,因此客户端看不到错误。但是,服务器随后因 StackOverflow 异常而崩溃。我只在 IISExpress/VisualStudio 中测试过这个,而不是在 IIS 中。
我在远程服务器上有 html 文件。我正在加载这样的html文件:
using (WebClient client = new WebClient()
{Credentials = new NetworkCredential(Username, Password)})
{
string html = client.DownloadString(url);
viewModel.Pages.Add(html);
}
“页面”可以包含多个 html 片段。但是,我使用的测试页面是一个完整的 html 页面,带有“doctype”、“head”、“body”等节点。
在我的视图中,我正在呈现这样的页面:
foreach(var page in Model.Pages)
{
@Html.Raw(page)
}
正如我所说,页面正确呈现,但服务器随后崩溃。我没有看到任何递归调用。我尝试使用调试诊断工具进行故障排除,但无法填充任何故障转储。
此外,如果我在没有 @Html.Raw() 的情况下呈现“页面”,则不会发生崩溃(但是,页面无法正确呈现。例如,LT/GT 括号被替换为“& gt ;" / "& lt;" 等字符)
我怀疑这可能与“html”字符串的长度或页面内容有关。我有另一个更简单、加载正确且不会导致服务器错误的站点地图页面。
异常也发生在不同的地方:System.Web.dll、mscorlib.dll 和 System.Runtime.Serialization.dll
如何解决此 StackOverflow 异常?
可以使用@Html.Raw() 呈现的字符串的大小是否有限制?
外部堆栈跟踪:
System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.HasOpenAttribute.get() 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.WriteState.get() 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlJsonWriter.WriteStartAttribute(string prefix, string localName, string ns) 未知 System.Xml.dll!System.Xml.XmlWriter.WriteAttributeString(string localName, string value) 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonWriterDelegator.WriteInt(int value) 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.IntDataContract.WriteXmlValue(System.Runtime.Serialization.XmlWriterDelegator writer, object obj, System.Runtime.Serialization.XmlObjectSerializerWriteContext context) 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonDataContract.WriteJsonValueCore(System.Runtime.Serialization.XmlWriterDelegator jsonWriter, object obj, System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context, System.RuntimeTypeHandle declaredTypeHandle) Unknown System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) Unknown System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool verifyKnownType, System.RuntimeTypeHandle declaredTypeHandle, System.Type声明类型)未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.SerializeWithXsiType(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle objectTypeHandle, System.Type objectType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle, System.Type 声明类型)未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) 未知 【轻量级功能】
System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonCollectionDataContract.WriteJsonValueCore(System.Runtime.Serialization.XmlWriterDelegator jsonWriter, object obj, System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context, System.RuntimeTypeHandle declaredTypeHandle) Unknown System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle declaredTypeHandle) Unknown System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool verifyKnownType, System.RuntimeTypeHandle declaredTypeHandle, System.Type声明类型)未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.SerializeWithXsiType(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, System.RuntimeTypeHandle objectTypeHandle, System.Type objectType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle, System.Type 声明类型)未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) 未知 System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) 未知
从[轻量级函数]到结尾的部分一直重复,直到崩溃。
编辑:
刚刚在“输出”窗口中发现此错误(以及其他错误):mscorlib.dll 中出现“System.UnauthorizedAccessException”类型的第一次机会异常
【问题讨论】:
-
完整的堆栈跟踪是什么样的?
-
我确实在外部堆栈跟踪上看到了递归:[轻量级函数]; WriteJsonValueCore(); WriteDataContractValue(); SerializeWithoutXsiType(); WriteContext.InternalSerialize(); WriteContextComplex.InternalSerialize(); REPEAT(不确定如何最好地在评论中显示堆栈跟踪)
-
你能告诉我们筹码交易吗,只是edit它进入问题。
-
我知道这是一个较旧的线程,但我遇到了同样的问题,这是由我添加到页面的无效 html 引起的。因此,也许您的页面也是 html 无效的 - 只是为了让其他人知道。
-
我遇到了同样的问题。尝试通过 Html.Raw() 显示大型日志文件的内容。堆栈跟踪以 System.Web.HttpResponseUnmanagedBufferElement.HttpResponseUnmanagedBufferElement() 结尾
标签: .net asp.net-mvc stack-overflow