GWT Query терпит неудачу во второй раз - только - PullRequest
0 голосов
/ 15 июня 2010

HI,

У меня есть функция визуализации в GWT, которая вызывает два экземпляра одной и той же панели - два запроса.Теперь предположим, что один URL-адрес A , а другой URL-адрес B .Здесь я сталкиваюсь с проблемой, заключающейся в том, что если сначала вызывается A , то работают и A , и B .Если сначала вызывается B , то работает только B , A - время ожидания истекло.Если я звоню оба раза A , работает только первый раз A , второй раз - тайм-аут.Если я вызываю B дважды, он работает оба раза без перебоев.

Даже если ошибка возникает по тайм-ауту, на самом деле это не время ожидания - в строке состояния FF он показывает до- передача данных из A , а затем он застревает.Это даже не отображается в первом запросе времени.

Единственная разница между A и B состоит в том, что B возвращается очень быстро, в то время как A возвращает сравнительно медленно.

Пример кода приведен ниже:

public Panel(){
    Runnable onLoadCallback = new Runnable() {
       public void run() {
          Query query = Query.create(dataUrl);
          query.setTimeout(60);
          query.send(new Callback() {
          public void onResponse(QueryResponse response) {
                  if (response.isError()){
                       Window.alert(response.getMessage());
                  }
              }
           }
      }
      VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
 }

В чем может быть причина этого?Я не могу придумать причину, почему это должно произойти?Почему это происходит только для A , а не для B ?

РЕДАКТИРОВАТЬ: дополнительные исследования.

Запрос, который работает постоянно (т.е. B - пример URL, указанный на сайте визуализации GWT: см. Комментарий [1]).Итак, я попытался в своем механизме приложения воспроизвести его следующим образом

    s = "google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});";
    response =  HttpResponse(s, content_type="text/plain; charset=utf-8")
    response['Expires'] = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
    return response

Где s - данные, когда мы запускаем запрос для B .Я тоже пытался добавить Expires и т. Д., Так как это, кажется, единственный заголовок, в котором есть различие, но теперь запрос все время терпит неудачу.

Для получения дополнительной информации - я сейчас отправляю разницу между моим серверомответ против ответа рабочего сервера.Кажется, они очень похожи.

HTTP/1.0 200 OK
Content-Type: text/plain
Date: Wed, 16 Jun 2010 11:07:12 GMT
Server: Google Frontend
Cache-Control: private, x-gzip-ok=""

google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});Connection closed by foreign host.


Mac$ telnet spreadsheets.google.com 80
Trying 209.85.231.100...
Connected to spreadsheets.l.google.com.
Escape character is '^]'.
GET http://spreadsheets.google.com/tq?key=pWiorx-0l9mwIuwX5CbEALA&range=A1:B12&gid=0&headers=-1
HTTP/1.0 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Wed, 16 Jun 2010 11:07:58 GMT
Expires: Wed, 16 Jun 2010 11:07:58 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Server: GSE

google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});Connection closed by foreign host.

Кроме того, обратите внимание, что движок приложения не позволял проходить заголовку Expires - может ли это быть причиной?Но если это причина, то она не должна завершиться ошибкой, если сначала отправляется B , а затем A .

Комментарий [1]: http://spreadsheets.google.com/tq?key=pWiorx-0l9mwIuwX5CbEALA&range=A1:B12&gid=0&headers=-1

1 Ответ

0 голосов
/ 17 июня 2010

Эта проблема решена. Причиной этой ошибки было то, что функция google QueryResponse ожидает, что reqId ответа будет увеличиваться для каждого запроса в одном сеансе, что я нигде не видел в документации. После того, как reqId был увеличен, он начал работать отлично.

...