活动同步客户端同步消息,状态代码4 - ParseSyncKey - AirSyncPermanentException

时间:2013-09-09 19:57:28

标签: exchange-server-2010 activesync

我目前正在编写一个活动的同步客户端,我已成功设法进行文件夹同步。我现在正在尝试同步“Notes”文件夹(使用sync命令),它给了我一个错误代码4,微软称之为“协议错误” - 我没有看到协议中有任何错误我发送,这是我日志中的部分:

文件夹同步RequestBody:

<?xml version="1.0" encoding="utf-8" ?>
<FolderSync xmlns="FolderHierarchy:">
    <SyncKey>0</SyncKey>
</FolderSync>

FolderSync ResponseBody:

<?xml version="1.0" encoding="utf-8" ?>
<FolderSync xmlns="FolderHierarchy:">
    <Status>1</Status>
    <SyncKey>1</SyncKey>
    <Changes>
        <Count>12</Count>
        <Add>
            <ServerId>1</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Calendar</DisplayName>
            <Type>8</Type>
        </Add>
        <Add>
            <ServerId>2</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Contacts</DisplayName>
            <Type>9</Type>
        </Add>
        <Add>
            <ServerId>3</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Deleted Items</DisplayName>
            <Type>4</Type>
        </Add>
        <Add>
            <ServerId>4</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Drafts</DisplayName>
            <Type>3</Type>
        </Add>
        <Add>
            <ServerId>5</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Inbox</DisplayName>
            <Type>2</Type>
        </Add>
        <Add>
            <ServerId>6</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Journal</DisplayName>
            <Type>11</Type>
        </Add>
        <Add>
            <ServerId>7</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Junk E-Mail</DisplayName>
            <Type>12</Type>
        </Add>
        <Add>
            <ServerId>8</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Notes</DisplayName>
            <Type>10</Type>
        </Add>
        <Add>
            <ServerId>9</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Outbox</DisplayName>
            <Type>6</Type>
        </Add>
        <Add>
            <ServerId>10</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Sent Items</DisplayName>
            <Type>5</Type>
        </Add>
        <Add>
            <ServerId>11</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>Tasks</DisplayName>
            <Type>7</Type>
        </Add>
        <Add>
            <ServerId>RI</ServerId>
            <ParentId>0</ParentId>
            <DisplayName>RecipientInfo</DisplayName>
            <Type>19</Type>
        </Add>
    </Changes>
</FolderSync>

我的同步请求身份:

<?xml version="1.0" encoding="utf-8" ?>
<Sync xmlns="AirSync:">
    <Collections>
        <Collection>
            <SyncKey>0</SyncKey>
            <CollectionId>8</CollectionId>
            <DeletesAsMoves>1</DeletesAsMoves>
            <GetChanges/>
        </Collection>
    </Collections>
</Sync>

列出此例外:

SyncCommand_OnExecute_Exception : 
Microsoft.Exchange.AirSync.AirSyncPermanentException
   at Microsoft.Exchange.AirSync.SyncCommand.ParseSyncKey(SyncCollection collection)
   at Microsoft.Exchange.AirSync.SyncCommand.SyncTheCollection(SyncCollection collection, Boolean createSubscription, Boolean tryNullSync)
   at Microsoft.Exchange.AirSync.SyncCommand.OnExecute()

并提供以下ResponseBody:

<?xml version="1.0" encoding="utf-8" ?>
<Sync xmlns="AirSync:">
    <Status>4</Status>
</Sync>

为什么它失败了?这是文件夹的第一次同步,因此SyncKey 应该为0 ......

1 个答案:

答案 0 :(得分:1)

来自http://msdn.microsoft.com/en-us/library/gg675447(v=exchg.80).aspx

如果GetChanges元素存在且为空,则返回Status元素(部分2.2.3.162.16)值4;如果SyncKey元素值为0(零),则返回设置为1(TRUE)。如果GetChanges元素不存在则不返回错误,或者当SyncKey值为0(零)时设置为0(FALSE)。

你的xml中存在并且为空。

您只能在任何后续同步请求中将GetChanges设置为1或将其设置为空(默认情况下为1),而不是在初始同步请求中。