我试图让我的Windows Phone 8 MDM系统正常工作。目前设备注册并正确初始化SyncML请求。它也响应服务器初始响应中的查询,但我认为它不喜欢它中的某些内容。原因是它使用重试间隔来建立到服务器的连接,然后再不连接。WP8-客户端中的SyncML协议停止响应
当我手动启动连接然后它工作,但自动连接没有发生。奇怪的是,SyncML SessionID计数器在内部按指定的时间间隔增加,但设备甚至不尝试连接服务器。
这里是我的SyncML协议
客户端开始:
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncHdr>
<VerDTD>1.2</VerDTD>
<VerProto>DM/1.2</VerProto>
<SessionID>E</SessionID>
<MsgID>1</MsgID>
<Target>
<LocURI>https://ssl.../enrollment/omadmservice.php</LocURI>
</Target>
<Source>
<LocURI>IMEI:35...64</LocURI>
<LocName>riho</LocName>
</Source>
<Cred>
<Meta>
<Format xmlns="syncml:metinf">b64</Format>
<Type xmlns="syncml:metinf">syncml:auth-md5</Type>
</Meta>
<Data>SoFh6khg4awLYXn2PQOOwQ==</Data>
</Cred>
</SyncHdr>
<SyncBody>
<Alert>
<CmdID>2</CmdID>
<Data>1201</Data>
</Alert>
<Replace>
<CmdID>3</CmdID>
<Item>
<Source>
<LocURI>./DevInfo/DevId</LocURI>
</Source>
<Data>IMEI:35...64</Data>
</Item>
...
</Replace>
<Final/>
</SyncBody>
</SyncML>
服务器响应:
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncHdr>
<VerDTD>1.2</VerDTD>
<VerProto>DM/1.2</VerProto>
<SessionID>E</SessionID>
<MsgID>1</MsgID>
<Target>
<LocURI>IMEI:35...64</LocURI>
</Target>
<Source>
<LocURI>https://ssl.../enrollment/omadmservice.php</LocURI>
<LocName>MDMServer</LocName>
</Source>
<Cred>
<Meta>
<Format xmlns="syncml:metinf">b64</Format>
<Type xmlns="syncml:metinf">syncml:auth-md5</Type>
</Meta>
<Data>ryJ+boSmdCoO8BzxXcYSxg==</Data>
</Cred>
</SyncHdr>
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>212</Data>
</Status>
<Status>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<CmdID>2</CmdID>
<Cmd>Alert</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>3</CmdRef>
<Cmd>Replace</Cmd>
<Data>200</Data>
</Status>
<Get>
<CmdID>4</CmdID>
<Item>
<Target>
<LocURI>./Vendor/MSFT/Registry/HKLM/Software/Microsoft/DeviceEncryption/Enabled</LocURI>
</Target>
</Item>
</Get>
</SyncBody>
</SyncML>
客户端发送它的响应:
<SyncML xmlns="SYNCML:SYNCML1.2">
<SyncHdr>
<VerDTD>1.2</VerDTD>
<VerProto>DM/1.2</VerProto>
<SessionID>E</SessionID>
<MsgID>2</MsgID>
<Target>
<LocURI>https://ssl.../enrollment/omadmservice.php</LocURI>
</Target>
<Source>
<LocURI>IMEI:35...64</LocURI>
</Source>
</SyncHdr>
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Chal>
<Meta>
<Format xmlns="syncml:metinf">b64</Format>
<Type xmlns="syncml:metinf">syncml:auth-md5</Type>
<NextNonce xmlns="syncml:metinf">kjjz6FyCYuYm9VUsSaHfKmj98GGfh9yeLvv8hlMNZak=</NextNonce>
</Meta>
</Chal>
<Data>212</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>4</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>4</CmdRef>
<Item>
<Source>
<LocURI>./Vendor/MSFT/Registry/HKLM/Software/Microsoft/DeviceEncryption/Enabled</LocURI>
</Source>
<Meta>
<Format xmlns="syncml:metinf">int</Format>
</Meta>
<Data>1</Data>
</Item>
</Results>
<Final/>
</SyncBody>
</SyncML>
和服务器存储DAT一个和下降连接。
任何人都可以在我的实现中发现一个错误?客户对服务器有什么期望?
你是如何收到来自get命令的结果响应的?每个执行,添加,替换命令都适用于我,但Get命令除外。该设备未将结果报告给服务器。 – 2013-02-25 06:04:21
尝试发送一些其他命令一起Get - 也许再次发送Chal或Cred。 – Riho 2013-02-25 09:21:39
它仍然不报告投入中房和CHAL之后的任何结果。 无论如何,根据WP8 MDM文档,如果证书不足,Chal似乎会被发送。也许这就是你的客户端停止响应的原因? CHAL 指定的验证挑战。服务器或客户端可以发送一个挑战,其他如无凭证或凭证不足的原始请求消息中给出。 – 2013-02-26 01:32:17