Ios Exchange ActiveSync目标-C配置命令请求错误

Ios Exchange ActiveSync目标-C配置命令请求错误,ios,objective-c,exchange-server,activesync,Ios,Objective C,Exchange Server,Activesync,我花了数天的时间反复尝试,查看了exchange日志,并在internet上搜索了所有内容,但到目前为止无法解决此问题 我正在iOS应用程序中实现ActiveSync功能,到目前为止,我已经成功地编码了自动发现过程和HTTP选项请求,以获得服务器的功能。我现在尝试运行Provision命令,但不断收到400个错误请求 以下是我要发送到服务器的内容: URL: https://mobile.[myexchangeserver].com/Microsoft-Server-ActiveSync?Cmd

我花了数天的时间反复尝试,查看了exchange日志,并在internet上搜索了所有内容,但到目前为止无法解决此问题

我正在iOS应用程序中实现ActiveSync功能,到目前为止,我已经成功地编码了自动发现过程和HTTP选项请求,以获得服务器的功能。我现在尝试运行Provision命令,但不断收到400个错误请求

以下是我要发送到服务器的内容:

URL: https://mobile.[myexchangeserver].com/Microsoft-Server-ActiveSync?Cmd=Provision&User=jack&DeviceID=123412341234&DeviceType=iOS

 Authorization = "Basic wekrju283j"; //Base 64 encoded auth, garbage for this posting
"Content-Length" = 104;
"Content-Type" = "application/vnd.ms-sync.wbxml";
"MS-ASProtocolVersion" = "12.1";
"User-Agent" = MyApp;
"X-MS-PolicyKey" = 0;

Body (converted to WBXML before sending):
<?xml version="1.0" encoding="utf-8"?>
<Provision xmlns="Provision:">
  <Policies>
    <Policy>
        <PolicyType>MS-EAS-Provisioning-WBXML</PolicyType>
    </Policy>
  </Policies>
</Provision>


WBXML: 02 00 25 6A 41 50 72 6F 76 69 73 69 6F 6E 00 50 6F 6C 69 63 69 65 73 00 50 6F 6C 69 63 79 00 50 6F 6C 69 63 79 54 79 70 65 00 2D 2F 2F 41 49 52 53 59 4E 43 2F 2F 44 54 44 20 41 69 72 53 79 6E 63 2F 2F 45 4E 00 44 00 44 0A 44 13 44 1A 03 4D 53 2D 45 41 53 2D 00 83 00 03 69 6E 67 2D 57 42 58 4D 4C 00 01 01 01 01
URL:https://mobile.[myexchangeserver].com/Microsoft Server ActiveSync?Cmd=Provision&User=jack&DeviceID=123412341234&DeviceType=iOS
授权=“基本wekrju283j”//Base 64编码身份验证,此发布的垃圾
“内容长度”=104;
“内容类型”=“应用程序/vnd.ms sync.wbxml”;
“MS ASProtocolVersion”=“12.1”;
“用户代理”=MyApp;
“X-MS-PolicyKey”=0;
正文(发送前已转换为WBXML):
MS EAS配置WBXML
WBXML:02 00 25 6A 41 50 72 6F 76 69 73 69 6F 6E 00 50 6F 6C 69 63 65 73 00 50 6F 6C 69 63 79 00 50 6F 69 63 79 54 79 70 00 2D 2F 41 49 52 53 59 4E 43 2F 44 54 44 20 41 69 72 53 79 6E 63 2F 45 4E 00 44 13 44 1A 03 4D 53 2D 45 41 53 2D 00 83 00 03 69 6 E 67 2D 57 42 58 4D 4C 00 01 01 01 01 01 01
除了“糟糕的请求”之外,我还能找到更多吗?或者有人看到我发送的内容有什么问题吗?服务器支持12.1协议(来自选项请求)

我一遍又一遍地阅读协议文档,仍然没有发现我所做的有任何错误。我知道我可以对参数进行base64编码,但根据protocl文档,这是可选的。我还知道,在14.1中,我需要用xml发送更多信息,因此我使用12.1协议

非常感谢您的帮助

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URI
                                                    cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300.0];
NSString *msgLength = [NSString stringWithFormat:@"%d",[requestBodyData length]];
NSLog(@"Request Body Data Length: %@",msgLength);

[request setHTTPMethod:@"POST"];
[request setValue:mAuthStringFinal forHTTPHeaderField:@"Authorization"];
[request setValue:@"iPhone" forHTTPHeaderField:@"DeviceType"];
[request setValue:@"application/vnd.ms-sync.wbxml" forHTTPHeaderField:@"Content-Type"];
[request setValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"12.1" forHTTPHeaderField:@"MS-ASProtocolVersion"];
[request setValue:@"*/*" forHTTPHeaderField:@"Accept"];
[request setValue:@"en-us" forHTTPHeaderField:@"Accept-Language"];
[request setValue:nil forHTTPHeaderField:@"X-MS-PolicyKey"];
[request setHTTPBody:requestBodyData];

NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

/* ensure the connection was created */
if (connection)
{
    /* initialize the buffer */
    buffer = [NSMutableData data];

    /* start the request */
    [connection start];
}
else
{
    NSLog(@"Connection Failed");
}
我在POST请求中添加了更多的标题,我得到了200个状态码。试试这个! 但是我无法将请求内容作为wbxml发送,而wbxml反过来又提供了一些无意义的字符作为响应

我在POST请求中添加了更多的标题,我得到了200个状态码。试试这个!
但是我无法将请求内容作为wbxml发送,而wbxml反过来又提供了一些无意义的字符作为响应

您的Provision命令上的命名空间看起来错误。它应该是“规定”,而不是“规定:”

我假设您从文档中的一些Microsoft示例中获得了XML。在许多情况下,我发现Microsoft的XML示例中包含拼写错误


很抱歉,这个回复没有来得更早。希望它将来能帮助其他人。

您的Provision命令上的名称空间看起来是错误的。它应该是“规定”,而不是“规定:”

我假设您从文档中的一些Microsoft示例中获得了XML。在许多情况下,我发现Microsoft的XML示例中包含拼写错误


很抱歉,这个回复没有来得更早。希望它能在将来帮助其他人。

为了找到这个问题的可能答案,我花了大半天的时间来追查我案件中模糊的“错误请求”理由,这是设备ID。尽管MS-ASHTTP手册中说32个字符,但对于Exchange的ActiveSync 14.1实现,设备ID的最大长度似乎是16个字符


无关:关于名称空间名称中的尾随冒号,我在很多示例中看到了名称空间的这个版本。libwbxml在某些地方似乎也期望或生成它。这很奇怪。

对于这个问题的可能答案,我花了大半天的时间来追踪我的案例中模糊的“错误请求”推理,这是设备ID。尽管MS-ASHTTP手册中说32个字符,但设备ID的最大长度至少是Exchange的ActiveSync 14.1实现的16个字符


无关:关于名称空间名称中的尾随冒号,我在很多示例中看到了名称空间的这个版本。libwbxml在某些地方似乎也期望或生成它。这很奇怪。

你在防火墙后面吗?不,我可以使用自动发现和选项成功连接和验证我配置了Exchange服务器,我正在尝试从iOS应用程序测试验证。从一个视图中,用户应输入电子邮件、用户名和密码,我想发出请求只是为了验证用户的身份。你能为我提供一些指导吗?你在防火墙后面吗?不,我可以使用自动发现和选项成功连接和验证我配置了Exchange服务器,我正在尝试从iOS应用程序测试验证。从一个视图中,用户应输入电子邮件、用户名和密码,我想发出请求只是为了验证用户的身份。你能给我一些指导吗?