2013-08-21 120 views
1

我與JayRock存在問題,我間歇性地收到 缺少值錯誤。JayRock間歇性缺失值

我不能重新創建錯誤,但它每天發生在100-150次左右(成千上萬的請求中)。

調查後已發現 上不能有在 HTTP請求沒有[RequestBody]元素的請求。

通常,它是這樣的:

[urlfield]

[RequestBody] { 「ID」:1, 「方法」: 「getAllAirports」, 「PARAMS」:[]}

[餅乾]

但在它沒有工作要求的情況包括:

[urlfield]

[餅乾]

我使用的是默認JayRock代理,並通過使用?測試頁的 請求總是工作。

有沒有人遇到過這個?或有任何想法?

非常感謝,

伊恩

UPDATE: 縱觀數據獨有似乎在IE錯誤,在IE7,8,9錯誤和10.雖然8是迄今爲止最錯誤,即使它的流量相當於9,小於10

回答

0

似乎是一個分析問題,從Jayrock http://jayrock.googlecode.com/hg/src/Jayrock.Json/Json/JsonTextReader.cs

private JsonToken Parse() 
    { 
     char ch = NextClean(); 

     // 
     // String 
     // 

     if (ch == '"' || ch == '\'') 
     { 
      return Yield(JsonToken.String(NextString(ch))); 
     } 

     // 
     // Object 
     // 

     if (ch == '{') 
     { 
      _reader.Back(); 
      return ParseObject(); 
     } 

     // 
     // Array 
     // 

     if (ch == '[') 
     { 
      _reader.Back(); 
      return ParseArray(); 
     } 

     // 
     // Handle unquoted text. This could be the values true, false, or 
     // null, or it can be a number. An implementation (such as this one) 
     // is allowed to also accept non-standard forms. 
     // 
     // Accumulate characters until we reach the end of the text or a 
     // formatting character. 
     // 

     StringBuilder sb = new StringBuilder(); 
     char b = ch; 

     while (ch >= ' ' && ",:]}/\\\"[{;=#".IndexOf(ch) < 0) 
     { 
      sb.Append(ch); 
      ch = _reader.Next(); 
     } 

     _reader.Back(); 

     string s = sb.ToString().Trim(); 

     if (s.Length == 0) 
      throw SyntaxError("Missing value."); 


     // 
     // Boolean 
     // 

     if (s == JsonBoolean.TrueText || s == JsonBoolean.FalseText) 
      return Yield(JsonToken.Boolean(s == JsonBoolean.TrueText)); 

     // 
     // Null 
     // 

     if (s == JsonNull.Text) 
      return Yield(JsonToken.Null()); 

     // 
     // Number 
     // 
     // Try converting it. We support the 0- and 0x- conventions. 
     // If a number cannot be produced, then the value will just 
     // be a string. Note that the 0-, 0x-, plus, and implied 
     // string conventions are non-standard, but a JSON text parser 
     // is free to accept non-JSON text forms as long as it accepts 
     // all correct JSON text forms. 
     // 

     if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') 
     { 
      if (b == '0' && s.Length > 1 && s.IndexOfAny(_numNonDigitChars) < 0) 
      { 
       if (s.Length > 2 && (s[1] == 'x' || s[1] == 'X')) 
       { 
        string parsed = TryParseHex(s); 
        if (!ReferenceEquals(parsed, s)) 
         return Yield(JsonToken.Number(parsed)); 
       } 
       else 
       { 
        string parsed = TryParseOctal(s); 
        if (!ReferenceEquals(parsed, s)) 
         return Yield(JsonToken.Number(parsed)); 
       } 
      } 
      else 
      { 
       if (!JsonNumber.IsValid(s)) 
        throw SyntaxError(string.Format("The text '{0}' has the incorrect syntax for a number.", s)); 

       return Yield(JsonToken.Number(s)); 
      } 
     } 

     // 
     // Treat as String in all other cases, e.g. when unquoted. 
     // 

     return Yield(JsonToken.String(s)); 
    } 
+0

請解釋問題到底在哪裏,以便它可以幫助Op找到解決方案 – Abhitalks