Модернизация 2 — задержка ответа

#android #retrofit2 #activesync

#Android #модернизация 2 #activesync

Вопрос:

У меня проблема с модернизацией 2. Я отправляю некоторые данные на сервер Microsoft EAS, но ответ получен через 20 секунд. Почему я знаю, что это проблема модернизации? Потому что без модернизации он работает правильно.

мои журналы:

 D/OkHttp: --> POST https://{my_host}/Microsoft-Server-ActiveSync?Cmd=Provisionamp;User={myuser}amp;DeviceId=837bc6c5690b40b98ab55f7a2231e50camp;DeviceType={mydevicetype} http/1.1
D/OkHttp: Content-Type: application/vnd.ms-sync.wbxml
D/OkHttp: Content-Length: 456
D/OkHttp: Authorization: Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
D/OkHttp: MS-ASProtocolVersion: 14.1
D/OkHttp: Connection: keep-alive
D/OkHttp: User-Agent: MyUserAgent
D/OkHttp: X-MS-PolicyKey: 0
D/OkHttp: [3,1,106,0,0,14,[...more here...],88,77,76,0,1,1,1,1] // <--- body
D/OkHttp: --> END POST (456-byte body)
  

через 20 секунд (кажется, что я получаю ответ после 20 обычного времени приема — в данном случае: 20596 мс):

 D/OkHttp: <-- 200 OK https://{my_host}/Microsoft-Server-ActiveSync?Cmd=Provisionamp;User={myuser}amp;DeviceId=837bc6c5690b40b98ab55f7a2231e50camp;DeviceType={mydevicetype}  (20596ms)
D/OkHttp: Content-Type: application/vnd.ms-sync.wbxml
D/OkHttp: request-id: {request_id}
D/OkHttp: Set-Cookie: {cookie_data}
D/OkHttp: X-CalculatedBETarget: {target}.local
D/OkHttp: X-MS-BackOffDuration: L/-470
D/OkHttp: X-DiagInfo: EXCHANGEHA
D/OkHttp: X-BEServer: EXCHANGEHA
D/OkHttp: Set-Cookie: {cookie_data}
D/OkHttp: X-FEServer: EX01
D/OkHttp: Date: Fri, 07 Oct 2016 10:30:08 GMT
D/OkHttp: <-- END HTTP (binary 15-byte body omitted)
  

Если я запрашиваю его без дооснащения, он немедленно отправляет мне ответ.

Мой код:

Инициализация:

 OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.addInterceptor(chain -> {
            Request original = chain.request();

            Request.Builder requestBuilder = original.newBuilder()
                    .addHeader("Authorization", getAuth(account))
                    .addHeader("MS-ASProtocolVersion", getProtocolVersion())
                    .addHeader("Connection", getConnectionType())
                    .addHeader("User-Agent", getUserAgent())
                    .addHeader("X-MS-PolicyKey", getPolicyKey());

            Request request = requestBuilder.build();
            return chain.proceed(request);
        });
        if (EasConfig.isDebug()) {
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            httpClient.addInterceptor(logging);
        }

        httpClient.readTimeout(30, TimeUnit.SECONDS);
        httpClient.writeTimeout(30, TimeUnit.SECONDS);

        OkHttpClient client = httpClient.build();

        retrofit = new Retrofit.Builder()
                .baseUrl(getBaseUrl(account))
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();
  

Вызов:

 ActiveSyncService service = retrofit.create(ActiveSyncService.class);
service.getData(getContentType(), command, getUser(account), getDeviceId(), getUserAgent(), serializer.toByteArray());
  

Конечная точка:

 @POST("Microsoft-Server-ActiveSync")
Call<ResponseBody> getData(@Header("Content-Type") String contentType, // <--- it has to be here -- it's not woking if I set it in incerteptor (don't know why)
                           @Query("Cmd") String command,
                           @Query("User") String user,
                           @Query("DeviceId") String deviceId,
                           @Query("DeviceType") String deviceType,
                           @Body byte[] data);
  

Комментарии:

1. У вас есть какое-либо решение проблемы? Поскольку я также сталкиваюсь с той же проблемой…