如何使用iPhone应用程序发布和获取asmx Web服务访问权限?

时间:2011-12-09 12:52:15

标签: iphone web-services

我是iPhone应用开发的新手。如何通过使用iPhone应用程序访问asmx Web服务来发布数据和获取数据?

1 个答案:

答案 0 :(得分:1)

我认为asmx webservices是SOAP webservices,你应该在这里阅读我的博客条目 -

http://www.makebetterthings.com/iphone/call-soap-web-service-from-iphone/

首先要调用SOAP服务,我使用SOAP请求创建一个字符串,如下所示。

 NSString *soapMessage = @"<?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"
        "<CelsiusToFahrenheit xmlns="http://tempuri.org/">n"
        "<Celsius>50</Celsius>n"
        "</CelsiusToFahrenheit>n"
        "</soap:Body>n"
        "</soap:Envelope>n";


After creating the SOAP request I create a NSMutableRequest to send this request to server.

NSURL *url = [NSURL URLWithString:@"http://w3schools.com/webservices/tempconvert.asmx"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];

[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"http://tempuri.org/CelsiusToFahrenheit" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

if( theConnection )
{
    webData = [[NSMutableData data] retain];
}
else
{
    NSLog(@"theConnection is NULL");
}

在触发请求后,我们可以在NSURLConnection的委托方法中收集XML响应。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConenction");
    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    NSLog(@"%@",theXML);
    [theXML release];
}

在 - (void)connectionDidFinishLoading:(NSURLConnection *)连接中的XML字符串中收集XML响应之后 我们可以使用TBXML为您喜欢的任何其他XML解析器解析此字符串。