1

何日も試行錯誤し、交換ログを調べ、インターネット全体を検索しましたが、これまでのところこの問題を解決できません.

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

「Bad Request」以外の情報を見つける方法はありますか? それとも、私が送ったものに何か問題があると思いますか? サーバーは 12.1 プロトコルをサポートしています (OPTIONS リクエストから)

私はプロトコルのドキュメントを何度も読んでいますが、私がしていることに問題はまだ見つかりません。パラメータをbase64でエンコードできることは知っていますが、オプションのprotoclドキュメントによると。また、14.1 では xml でより多くの情報を送信する必要があることも知っています。そのため、12.1 プロトコルを使用しているのです。

どんな助けでも大歓迎です。

4

3 に答える 3

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 として送信することができず、応答で無意味な文字が返されます。

于 2013-09-09T08:08:21.627 に答える
0

Provision コマンドの名前空間が間違っているようです。「Provision:」ではなく「Provision」である必要があります。

[MS-ASPROV].pdfドキュメントにある Microsoft の例のいくつかから XML を取得したと思います。多くの場合、Microsoft の XML サンプルにはタイプミスが含まれていることがわかりました。

申し訳ありませんが、この応答はそれほど早く来ませんでした. うまくいけば、それは将来誰かを助けるかもしれません。

于 2015-08-26T23:38:35.307 に答える
0

この質問に対する可能な答えを得るために、私は 1 日の半分以上を費やして、自分のケースの漠然とした「不適切な要求」の理由を突き止めました。それはデバイス ID でした。デバイス ID の最大長は、MS-ASHTTP マニュアルで 32 文字と記載されているにもかかわらず、少なくとも Exchange の ActiveSync 14.1 実装では 16 文字のようです。

ここに画像の説明を入力

無関係:名前空間名の末尾のコロンに関しては、多くの例でそのバージョンの名前空間を見てきました。libwbxml もそれを予期しているか、いくつかの場所で生成しているようです。とても風変わりです。

于 2021-06-08T00:29:41.697 に答える