現在、非同期 NSURLConnection を使用して JSON データを ASP.Net WebAPI リソースに投稿しています。connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: が呼び出され、正しい量のデータが書き込まれています。しかし、connection:didReceiveResponse:、connection:didReceiveData:、または connectionDidFinishLoading: は呼び出されていませんが、最終的にはあきらめ、接続が失われます。
次のように接続を設定しています。
NSURL *url = [[NSURL URLWithString:[Common baseUrl]] URLByAppendingPathComponent:@"api/iCat/wishlists/upload"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.f];
NSString *jsonString = [self generateStrippedJsonForWishlist:wishlist];
NSData *requestData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];
そして、以下との接続を開始します:
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
最終的に、要求は「ネットワーク接続が失われました」というエラー メッセージでタイムアウトになります。私には、アプリがメッセージの本文を完全に書き終えることはないように思えます。
API 側からは、メソッドが実際に呼び出されることはありません (ブレークポイントにヒットしていません)。しかし、本文なしでリクエストを送信すると、送信されます。
curl を使用して同じ呼び出しをテストしましたが、期待どおりに動作しています。
curl -v -i -X POST -H "Content-Type: application/json" -d '{"CreatedBy":"iPad Simulator","ContactName":"Ddd","ContactEmail":"ddd","Products":[{"ProductId":117,"ProductName":"Internal doors - deco","Specification":""}]}' http://SCMOBILE02:1861/api/iCat/wishlists/upload