API nevydá seznam položek modulu - eWay-CRM® Mobile dokola opakuje úvodní synchronizaci

Popis

Mobilní aplikace opakuje dokola úvodní synchronizaci do určitého bodu. Aplikace zvládne dokončit jeden modul, ale už nenačte další. Typicky ten, který už nezačne je ten, který má nejvíce položek (například deníky).

Chyba synchronizace, která způsobuje opakování, je v logu, který lze odeslat z mobilní aplikace.

Na Andriodu vypadá hlavní část chyby takto:

Caused by: java.net.ConnectException: The WCF is not responding properly on method 'GetWorkflowModelsByItemGuids'. Status code: -1, status message: 'IO exception while loading from WCF: recvfrom failed: ECONNRESET (Connection reset by peer)'
    at com.eway_crm.core.client.WcfConnection.callMethod(WcfConnection.java:472)
    at com.eway_crm.core.datainterfaces.WcfRemoteItemStore.getModels(WcfRemoteItemStore.java:866)
    ... 9 more

 Celá výjimka může vypadat například takto:

2017-11-16 09:42:20 com.eway_crm.mobile.androidapp.sync.exceptions.SynchronizationException: Loading block of items failed due to the remote store error.
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread$BlockLoader.loadAndSave(SynchronizationThread.java:1115)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread.syncItems(SynchronizationThread.java:861)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread.syncAllModuleItems(SynchronizationThread.java:726)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread.runFullSync(SynchronizationThread.java:555)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread.run(SynchronizationThread.java:222)
    at com.eway_crm.mobile.androidapp.sync.WcfSyncAdapter.onPerformSync(WcfSyncAdapter.java:118)
    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)
Caused by: com.eway_crm.core.datainterfaces.exceptions.RemoteStoreException: Connection error while using the remote store.
    at com.eway_crm.core.datainterfaces.WcfRemoteItemStore.getModels(WcfRemoteItemStore.java:869)
    at com.eway_crm.mobile.androidapp.sync.modules.ModelsSynchronizedModule.getItems(ModelsSynchronizedModule.java:59)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread$3.loadItems(SynchronizationThread.java:732)
    at com.eway_crm.mobile.androidapp.sync.SynchronizationThread$BlockLoader.loadAndSave(SynchronizationThread.java:1112)
    ... 6 more
Caused by: java.net.ConnectException: The WCF is not responding properly on method 'GetWorkflowModelsByItemGuids'. Status code: -1, status message: 'IO exception while loading from WCF: recvfrom failed: ECONNRESET (Connection reset by peer)'
    at com.eway_crm.core.client.WcfConnection.callMethod(WcfConnection.java:472)
    at com.eway_crm.core.datainterfaces.WcfRemoteItemStore.getModels(WcfRemoteItemStore.java:866)
    ... 9 more

 Na iPhone se chybový záznam v logu zobrazuje takto (iOS náhlý konec TCP komunikace vyhodnotí jako odpojení sítě):

[ERROR] [BACK] [2017-11-16 09:59:50] Sync error: Unable to get all items identifiers of module EnumValues due to the remote store error: Connection error while using the remote store. More: The WCF is not responding properly. Status code: 'Optional(-2))', status message: 'Optional("Network connection lost.")'.

Verze

Všechny verze eWay-CRM®

Obtížnost řešení

Vysoká

Postup řešení

WCF služba na IIS má několik limitů na request, buffer, response i serializer. Seznam je uveden zde: http://geekswithblogs.net/mnf/archive/2013/06/02/response-for-rest-method-was-truncated-because-default-maxitemsinobjectgraph-was.aspx

eWay-CRM® zvyšuje limity na vstup i buffer. Problém může být v počtu objektů v grafu, který je serializován nebo deserializován pro JSON. Ten se nastavuje v rámci web.config WCF služby takto:

<behavior name="webBehaviour">
    <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>

Nicméně, ve výchozím nastavení toto není potřeba. Kombinace nejnovějších IIS, WinServer a .NET dokáže přenášet statisíce položek bez nastavení tohoto limitu. Řešení je tedy primárně určeno pro starší verze OS, IIS a .NET.