Openrasta数据序列化问题

时间:2012-02-13 12:27:01

标签: 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中看到请求,但是它显示状态为很长时间未决,当它到达服务器时它会给出上述异常。但是同样工作得很好。

任何人都可以解释一下这种行为吗?如果想要我可以提供一些与之相关的其他代码。

1 个答案:

答案 0 :(得分:2)

延迟可能只是由于asp.net在你最终失去空闲状态时必须重新启动,这需要一段时间。

至于错误,似乎是json数据协定序列化程序无法解析请求。我建议检查一些事情,如果它失败,请在此处发布详细信息,以便我们为您提供进一步的帮助。

  1. 当错误是triggererd(用fiddler)时身体确实是正确的
  2. 您没有一些特定于asp.net的问题会阻止请求正确到达asp.net管道,例如基于cookie的身份验证或会话管理
  3. 请求未被任何http模块拦截(防伪令牌等)。
  4. 请提供您的映射,实体和OR日志的副本(您可以通过将调试器附加到服务器进程获得),我们将尽力帮助您。