如何使用AFNetworking 2.0创建SOAP POST请求

时间:2014-07-24 07:48:46

标签: web-services soap ios7 http-post afnetworking-2

这是我第一次使用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)

0 个答案:

没有答案