1

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

文件夹同步 RequestBody :

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

FolderSync 响应体:

<?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...

4

1 回答 1

1

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

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

您的 xml 中有当前和空的。

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

于 2014-01-09T21:39:14.753 回答