This is SOAP WebService method:
<PostXMLStr xmlns="http://tempuri.org/">
<cust>string</cust>
<tran>string</tran>
<ret>string</ret>
<ppay>string</ppay>
<recp>string</recp>
<sCode>string</sCode>
<companyShortName>string</companyShortName>
<companyCode>string</companyCode>
This is what i calling SOAP:
<PostXMLStr xmlns=\"http://tempuri.org/\">\n"
" <cust><NEWCUSTOMERS><NEWCUSTOMER></NEWCUSTOMER></NEWCUSTOMERS></cust>\n"
" <tran><TRANS><TRAN></TRAN></TRANS></tran>\n"
" <ret><RETURNS><RETURN></RETURN></RETURNS></ret>\n"
" <ppay><PREPAYMENTS></PREPAYMENTS></ppay>\n"
" <recp><RECEIPTS><RECEIPT></RECEIPT></RECEIPTS></recp>\n"
" <sCode>BB</sCode>\n"
" <companyShortName>SAMINC</companyShortName>\n"
" <companyCode>01</companyCode>\n"
将参数传递给SOAP WebService时遇到了一些问题。我无法找到它。当我调用另一个没有参数的SOAP WebService给我响应时。我假设传递参数有问题。我们将不胜感激。提前谢谢。
答案 0 :(得分:0)
我已经编写了soap_parser类来阅读制作SOAP Message,它非常直接实现,只需按照步骤操作即可解决问题。
步骤1:使用以下代码创建.h文件soap_parser.h
并进行相应的域更改
#error Set Your Request Domain & Webservice name
#define DOMAIN_URL @"http://yourDomain.com/WebService/"
#define SERVICE_URL DOMAIN_URL@"/iphoneservice.asmx"
#define TEMP_URL @"http://tempuri.org"
#import <Foundation/Foundation.h>
@protocol soap_parser_delegate <NSObject>
@optional
-(void)receivedResponseWithStatusCode:(NSInteger)statusCode;
-(void)requestFailedWithError:(NSError *)err;
@required
-(void)dataReceivingCompleted:(NSMutableData *)data;
@end
@interface soap_parser : NSObject
{
NSMutableURLRequest *soap_request;
NSURLResponse *soap_response;
NSMutableData *soap_responseData;
NSString *currentAction;
id <soap_parser_delegate>delegate;
}
@property (nonatomic, retain) NSMutableData *soap_responseData;
@property (nonatomic, retain) NSString *currentAction;
@property (nonatomic, retain) id <soap_parser_delegate>delegate;
#pragma mark - Initialize Parsing
-(void)startParsingWithAction:(NSString *)action andWithParams:(NSDictionary *)params;
#pragma mark - Create SOAP message
-(NSString *)createSoapMesssageFrom:(NSDictionary *)requestParam;
@end
步骤2:使用以下代码
创建.m文件soap_parser.m
#import "soap_parser.h"
@implementation soap_parser
@synthesize soap_responseData, currentAction, delegate;
#pragma mark - Initialize Parsing
-(void)startParsingWithAction:(NSString *)action andWithParams:(NSDictionary *)params
{
self.currentAction = action;
NSString *reqSOAPmsg = [self createSoapMesssageFrom:params];
NSURL *url = [NSURL URLWithString:SERVICE_URL];
soap_request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [reqSOAPmsg length]];
[soap_request addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[soap_request addValue: [NSString stringWithFormat:@"%@/%@",TEMP_URL,self.currentAction] forHTTPHeaderField:@"SOAPAction"];
[soap_request addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[soap_request setHTTPMethod:@"POST"];
[soap_request setHTTPBody: [reqSOAPmsg dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *cn = [[NSURLConnection alloc] initWithRequest:soap_request delegate:self];
[cn start];
}
#pragma mark - Create SOAP message
-(NSString *)createSoapMesssageFrom:(NSDictionary *)requestParam
{
NSMutableString *soapMessage = [[NSMutableString alloc] init];
[soapMessage appendFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<%@ xmlns=\"http://tempuri.org/\">\n",self.currentAction];
for(NSString *key in requestParam)
{
[soapMessage appendFormat:@"<%@>%@</%@>\n",key,[requestParam valueForKey:key],key];
}
[soapMessage appendFormat:@"</%@>\n"
"</soap:Body>\n"
"</soap:Envelope>",self.currentAction];
NSLog(@"%@",soapMessage);
return soapMessage;
}
#pragma mark - NSURLConnection Delegate
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
if([delegate respondsToSelector:@selector(receivedResponseWithStatusCode:)])
{
[delegate performSelector:@selector(receivedResponseWithStatusCode:) withObject:httpResponse];
}
self.soap_responseData = [[NSMutableData alloc] initWithCapacity:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.soap_responseData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
if([delegate respondsToSelector:@selector(requestFailedWithError:)])
{
[delegate performSelector:@selector(requestFailedWithError:) withObject:error];
}
connection = nil;
self.soap_responseData = nil;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if([delegate respondsToSelector:@selector(dataReceivingCompleted:)])
{
[delegate performSelector:@selector(dataReceivingCompleted:) withObject:self.soap_responseData];
}
}
@end
步骤3:#import "soap_parser.h"
.h文件中的<soap_parser_delegate>
和ViewController
,您要拨打肥皂电话。
步骤4:在.m文件中实现以下Delegate方法
#pragma mark - SOAP parser Delegate
-(void)receivedResponseWithStatusCode:(NSInteger)statusCode
{
NSLog(@"Status Code : %d",statusCode);
}
-(void)requestFailedWithError:(NSError *)err
{
NSLog(@"Failed : %@",[err description]);
}
-(void)dataReceivingCompleted:(NSMutableData *)data
{
NSLog(@"Response Data Length : %d",data.length);
NSString *responseString = [[NSString alloc] initWithBytes:[data mutableBytes] length:[data length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);
#warning Do something with your Response Data
}
步骤5:使用数据创建一个字典,以便在SOAP请求中发送以调用您的SOAP_WEBSERVICE,并将其休息。
NSDictionary *dictParams = [NSDictionary dictionaryWithObjectsAndKeys:@"CUST ID", @"cust",
@"Transaction ID",@"tran",
@"Ret Value",@"ret",
@"PPAY Value",@"ppay",
@"RECP Value",@"recp",
@"SCODE Value",@"sCode",
@"MY COMPANY LTD.",@"companyShortName",
@"COMPANY_007",@"companyCode", nil];
// Create Object of SOAP_Parser
soap_parser *objSOAP = [[soap_parser alloc] init];
// Set Delegate to self
[objSOAP setDelegate:self];
// Send Request with param Dictionary
[objSOAP startParsingWithAction:@"UserLogin" andWithParams:dictParams];