【问题标题】:Exchange ActiveSync Objective-C Provision Command Bad RequestExchange ActiveSync Objective-C 配置命令错误请求
【发布时间】:2013-07-09 00:19:36
【问题描述】:

我花了几天的时间反复试验,查看了交换日志,并在整个互联网上进行了搜索,但到目前为止我无法解决这个问题。

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

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

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

除了“错误请求”之外,我还能找到更多信息吗?或者有人看到我发送的内容有什么问题吗?服务器支持12.1协议(来自OPTIONS请求)

我一遍又一遍地阅读协议文档,但仍然找不到我正在做的任何问题。我知道我可以对参数进行 base64 编码,但根据协议文档是可选的。我也知道在 14.1 中我需要在 xml 中发送更多信息,因此我使用 12.1 协议。

非常感谢任何帮助。

【问题讨论】:

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

标签: ios objective-c exchange-server activesync


【解决方案1】:

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

不相关:关于命名空间名称中的尾随冒号,我在很多示例中都看到了该版本的命名空间。 libwbxml 似乎也期待它或在某些地方生成它。这很古怪。

【讨论】:

    【解决方案2】:

    您的 Provision 命令上的命名空间看起来有问题。它应该是“Provision”而不是“Provision:”。

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

    很抱歉,此回复没有及时回复。希望它可以在未来对其他人有所帮助。

    【讨论】:

      【解决方案3】:
      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 发送,这反过来又提供了一些无意义的字符作为响应。

      【讨论】:

        猜你喜欢
        • 2013-06-07
        • 2012-01-31
        • 1970-01-01
        • 2020-07-30
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 2011-10-26
        相关资源
        最近更新 更多