这是我第一次使用AFNetworking 2.0发出SOAP请求 我不知道问题是什么,但我真的无法进行正确的网络服务电话。
使用SOAP UI,这是请求格式
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header>
<tem:Username>myHeaderUserName</tem:Username>
<tem:Password>myHeaderHashedPassword</tem:Password>
</soapenv:Header>
<soapenv:Body>
<tem:GetDailyTaskLogRequest>
<tem:Day>7/23/2014</tem:Day>
<tem:DeliverableID>0</tem:DeliverableID>
<tem:GetFirstTimeIn>false</tem:GetFirstTimeIn>
<tem:MileStoneID>0</tem:MileStoneID>
<tem:OtherFilterType></tem:OtherFilterType>
<tem:OtherFilterValue>0</tem:OtherFilterValue>
<tem:ProjectCode></tem:ProjectCode>
<tem:SubProjectID>0</tem:SubProjectID>
<tem:TaskType>Active</tem:TaskType>
<tem:UserName>myBodyUsername</tem:UserName>
</tem:GetDailyTaskLogRequest>
</soapenv:Body>
</soapenv:Envelope>
所以我所做的,在我的iOS应用程序中进行Web服务调用的方法是
NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">"
"<soap:Body>"
"<tem:GetDailyTaskLogRequest>"
"<tem:Day>7/23/2014</tem:Day>"
"<tem:DeliverableID>0</tem:DeliverableID>"
"<tem:GetFirstTimeIn>false</tem:GetFirstTimeIn>"
"<tem:MileStoneID>0</tem:MileStoneID>"
"<tem:OtherFilterType></tem:OtherFilterType>"
"<tem:OtherFilterValue>0</tem:OtherFilterValue>"
"<tem:ProjectCode></tem:ProjectCode>"
"<tem:SubProjectID>0</tem:SubProjectID>"
"<tem:TaskType>Active</tem:TaskType>"
"<tem:UserName>myUserName</tem:UserName>"
"</tem:GetDailyTaskLogRequest>"
"</soap:Body>"
"</soap:Envelope>"];
NSURL *url = [NSURL URLWithString:];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest addValue: @"myHeaderUserName" forHTTPHeaderField:@"Username"];
[theRequest addValue: @"myHeaderHashedPassword" forHTTPHeaderField:@"Password"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // if response XML format
[manager POST:@"" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"SUCCESS RESPONSE: %@", responseObject);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"ERROR RESPONSE: %@", error);
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
}];
实际上,我认为我的问题实际上是如何格式化正确的Soap请求,它将访问并提供所需的参数,这些参数是:我应该在请求的Header上传递有效的UserName和Password,我应该在肥皂体内传递有效参数值(Day,DeliverableID,GetFirstTimeIn等)。
我做错了什么?因为当我运行它时,我得到错误响应:
ERROR RESPONSE: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400)" UserInfo=0x1094a91f0 {com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x10940d620> { URL: myURLString } { status code: 400, headers {
"Cache-Control" = private;
"Content-Length" = 0;
Date = "Thu, 24 Jul 2014 07:42:48 GMT";
Server = "Microsoft-IIS/6.0";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET";
} }, NSLocalizedDescription=Request failed: bad request (400), NSErrorFailingURLKey=myURLString}
(注意:我编辑了错误响应,只是用myURLString var隐藏我的实际urlString)