ajax - Openrasta 数据序列化问题

标签 ajax rest serialization openrasta

我目前正在使用 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数据契约序列化器无法解析请求。我建议检查一些事情,如果失败,请在此处发布详细信息,以便我们可以为您提供进一步帮助。

  1. 在错误被触发时,主体确实是正确的(使用fiddler)
  2. 您不存在一些会阻止请求正确到达 asp.net 管道的 ASP.NET 特定问题,例如基于 Cookie 的身份验证或 session 管理
  3. 该请求未被任何 http 模块(防伪 token 等)拦截。

请提供您的映射、实体和 OR 日志的副本(您可以通过将调试器附加到服务器进程来获取该日志),我们将尽力为您提供进一步帮助。

关于ajax - Openrasta 数据序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9260498/

相关文章:

javascript - .load() 后回调函数不执行点击

php - 使用jquery检测表单提交完成

ajax - Twitter-Bootstrap 选项卡通过 AJAX 加载容器内容

json - Bad Request -Post 方法 - JSON DateTime 问题

php - Laravel Eloquent 序列化

java - dwr 中的透明批处理远程调用

javascript - 如何在 AngularJS 中使用 $resource 查询所有内容

javascript - 如何添加跨域资源共享请求头?

java - Spring MVC - 我的域类是否应该为在线传输实现可序列化?

java - Thrift 列表的序列化(反序列化)