我遇到了JayRock的问题,我间歇性地接收了这个问题 缺少价值错误。
我无法重新创建错误,但每天生产大约100-150次(成千上万的请求)。
经过调查,人们发现了这一点 在失败的请求中,没有[RequestBody]元素 HTTP请求。通常看起来像这样:
[urlfield]
[RequestBody] {“id”:1,“method”:“getAllAirports”,“params”:[]}
[饼干]
但是在没有工作的情况下,请求包含:
[urlfield]
[饼干]
我正在使用默认的JayRock代理,并使用?测试页面 请求总是有效。
以前有人遇到过这个吗?还是有什么想法?
非常感谢,
伊恩
更新: 查看数据似乎只是IE中的一个错误,IE7,8,9和10中存在错误。尽管8的错误是最多的,即使它的流量相当于9且小于10。
答案 0 :(得分: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));
}