#import <Foundation/Foundation.h>
@interface WebService : NSObject {
}
+ (void)setWebUrl:(NSString *)url ;
+ (NSData *) SoapCall:(NSString *)method PostData:(NSString *)post ;
+ (NSData *)SoapInvoke:(NSString *)method params:(NSArray *)params ;
@end
// WebService.m
#import "WebService.h"
static NSString* SoapURL=@"http://xxxxxxx/shserver/Service.asmx";
static NSString * SoapPrefix=@"http://tempuri.org/";
@implementation WebService
+ (void)setWebUrl:(NSString *)url
{
SoapURL=url;
}
+ (NSData *) SoapCall:(NSString *)method PostData:(NSString *)post
{
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
[postData autorelease];
NSString *soapAction = [NSString stringWithFormat:@"%@%@",SoapPrefix , method ];
NSURL *url=[[NSURL alloc]initWithString:SoapURL];
NSMutableURLRequest *request=[[NSMutableURLRequest alloc]init];
[request setTimeoutInterval: 200 ];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
[request setURL: url ] ;
[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:soapAction forHTTPHeaderField:@"SOAPAction"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSError *err=nil;
NSData *data=[NSURLConnection sendSynchronousRequest:request
returningResponse:nil
error:&err];
if(err){NSLog(@"ERROR");}
return data ;
}
+ (NSData *)SoapInvoke:(NSString *)method params:(NSArray *)params
{
NSMutableString * post = [[ NSMutableString alloc ] init ] ;
[ post autorelease ];
[ post appendString:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\""
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
"<soap:Body>\n" ];
[ post appendString:@"<"];
[ post appendString:method];
[ post appendString:@" xmlns=\""];
[ post appendString:SoapPrefix];
[ post appendString:@"\">\n"];
for (NSDictionary *dict in params)
{
NSString *value = nil;
NSString *key = [[dict keyEnumerator] nextObject];
if (key != nil)
{
value = [dict valueForKey:key];
[ post appendString:@"<"];
[ post appendString:key];
[ post appendString:@">"];
if( value != nil )
{
[ post appendString:value];
}
else
{
[ post appendString:@""];
}
[ post appendString:@"</"];
[ post appendString:key];
[ post appendString:@">\n"];
}
}
[ post appendString:@"</"];
[ post appendString:method];
[ post appendString:@">\n"];
[ post appendString:
@"</soap:Body>\n"
"</soap:Envelope>\n"
];
// NSString *filePath = [[NSBundle mainBundle] pathForResource:@"login" ofType:@"json"];
// NSString *test = [NSString stringWithContentsOfFile:filePath];
NSLog(@"====================request=========================\n%@\n", post);
return [self SoapCall:method PostData:post];
}
@end