我目前正在使用 openRasta 构建 Rest Api。我在发送 Ajax 请求时观察到奇怪的行为。有时请求成功,有时会失败,并给出以下异常。
{Exception:
System.Runtime.Serialization.SerializationException: Expecting element 'root' from namespace ''.. Encountered 'None' with name '', namespace ''.
at System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName)
at System.Runtime.Serialization.XmlObjectSerializer.InternalReadObject(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader reader)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream)
at OpenRasta.Codecs.JsonDataContractCodec.ReadFrom(IHttpEntity request, IType destinationType, String paramName)
at OpenRasta.OperationModel.Hydrators.RequestEntityReaderHydrator.TryReadPayloadAsObject(IHttpEntity requestEntity, IMediaTypeReader reader, IOperation operation)}
我观察到的一件事是,当我让浏览器空闲一段时间(比如超过 10 分钟)时,我可以在 firebug 中看到该请求,但它显示状态为待处理很长时间,当它到达服务器时,它会给出上述异常。但是有时同样的效果很好。
任何人都可以向我解释这种行为吗?如果需要,我可以提供一些与之相关的附加代码。
最佳答案
延迟可能只是由于当您最终摆脱空闲状态时 ASP.NET 必须重新启动而造成的,这需要一些时间。
至于错误,似乎是json数据契约序列化器无法解析请求。我建议检查一些事情,如果失败,请在此处发布详细信息,以便我们可以为您提供进一步帮助。
- 在错误被触发时,主体确实是正确的(使用fiddler)
- 您不存在一些会阻止请求正确到达 asp.net 管道的 ASP.NET 特定问题,例如基于 Cookie 的身份验证或 session 管理
- 该请求未被任何 http 模块(防伪 token 等)拦截。
请提供您的映射、实体和 OR 日志的副本(您可以通过将调试器附加到服务器进程来获取该日志),我们将尽力为您提供进一步帮助。
关于ajax - Openrasta 数据序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9260498/