Ensembles で IIS 8 Webdav バックエンドを介して同期を使用しようとしています。私が遭遇する問題は、最初の同期が正常に機能することですが、2 回目の同期または 2 番目のユニット (この場合は iPad) で同期しようとすると、サーバー エラー 405 "メソッドが許可されていません" が表示されます。IIS Webdavと同期するために、誰かがこれに遭遇し、それを機能させましたか?
これは、サーバー応答の allheaderfield プロパティです。
" UserInfo={NSLocalizedDescription=HTTP status code was {
Allow = "COPY, PROPFIND, DELETE, MOVE, PROPPATCH, LOCK, UNLOCK";
Connection = "Keep-Alive";
"Content-Length" = 1293;
"Content-Type" = "text/html";
Date = "Mon, 25 Jan 2016 12:02:07 GMT";
"Persistent-Auth" = true;
Server = "Microsoft-IIS/8.5";
"X-UA-Compatible" = "IE=8";
編集:結局のところ、これは構成の問題ではない可能性があります。いくつかのログを追加したところ、createDirectoryAtPath メソッドで HTTP エラー 405 が返されました。これが元のコードです。
- (void)createDirectoryAtPath:(NSString *)path completion:(CDECompletionBlock)completion{
NSMutableURLRequest *request = [self mutableURLRequestForPath:path];
request.HTTPMethod = @"MKCOL";
[request setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
[self sendURLRequest:request completion:^(NSError *error, NSInteger statusCode, NSData *responseData) {
if (completion) completion(error);
}];}
これは directoryExistsAtPath メソッドです。
- (void)directoryExistsAtPath:(NSString *)path completion:(CDEDirectoryExistenceCallback)completion{
[self sendPropertyFindRequestForPath:path depth:0 completion:^(NSError *error, NSInteger statusCode, NSData *responseData) {
if (error && statusCode != 404) {
if (completion) completion(NO, error);
}
else if (statusCode == 404) {
if (completion) completion(NO, nil);
}
else {
CDEWebDavResponseParser *parser = [[CDEWebDavResponseParser alloc] initWithData:responseData];
BOOL succeeded = [parser parse:&error];
if (!succeeded) {
if (completion) completion(NO, error);
return;
}
BOOL isDir = [parser.cloudItems.lastObject isKindOfClass:[CDECloudDirectory class]];
if (completion) completion(isDir, nil);
}
}];}
最後の完了ブロックの最初のパラメーター (現在は isDir 変数) を YES に置き換えると、405 エラーは表示されません。空の)。したがって、パラメーターを YES に設定すると、データが webdav にアップロードされ、フォルダーが配置されます。ただし、2 番目のユニットでテストする (または同じユニットにアプリを再インストールする) と、ダウンロードは行われず、downloadFromPath が呼び出されることも、"GET" 要求が送信されることもありません。
基礎となるフレームワーク (主に CDECloudmanager) の呼び出しコードを見ても、これまでのところどこにも導かれませんでした。
directoryExistsAtPath はオプションなので、コメントアウトしてみましたが、違いはないと思います。
私が気付いたもう 1 つのことは、ベースライン フォルダーにいくつかのベースライン ファイルがあることです。Ensembles のドキュメントによると、存在するのは 1 つだけです。
手がかりはありますか?