从 iOS 上的 .net Web 服务获取数据
Posted
技术标签:
【中文标题】从 iOS 上的 .net Web 服务获取数据【英文标题】:Getting Data From .net Web Service on iOS 【发布时间】:2013-01-23 02:22:02 【问题描述】:我有一个 .Net 网络服务,我将它用于移动应用程序。我在 windows phone 和 android 应用程序上使用了它,但我还没有在 ios 上从中获取数据。例如,我的 Web 服务中有一种方法,它需要一个参数。如何从返回值中获取数据?我在互联网上找到了一个示例并对其进行了编辑,但无法获取数据。所有代码都在这里。在这种情况下我需要一个示例代码。感谢关注。
网络服务信息:
命名空间:http://tempuri.org 网址:http://www.example.com/webservice1.asmx 方法名称:FirmaGetir 参数名称:firID(字符串)
网络服务请求:
POST /webservice1.asmx HTTP/1.1
Host: example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<FirmaGetir xmlns="http://tempuri.org/">
<firID>string</firID>
</FirmaGetir>
</soap12:Body>
</soap12:Envelope>
返回数据:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<FirmaGetirResponse xmlns="http://tempuri.org/">
<FirmaGetirResult>
<Firma>
<firma_adi>string</firma_adi>
<adres>string</adres>
<telefon>string</telefon>
<id>string</id>
<sektor>string</sektor>
<alt_sektor>string</alt_sektor>
<alt_sektor_adi>string</alt_sektor_adi>
<servis>string</servis>
<map>string</map>
<slogan>string</slogan>
<sayfaGosterimi>int</sayfaGosterimi>
<gpsilce>string</gpsilce>
<gpssemt>string</gpssemt>
<gpspk>string</gpspk>
<duyuru>
<baslik>string</baslik>
<icerik>string</icerik>
<link>string</link>
<image>string</image>
</duyuru>
<firma_link>
<tam_adi>string</tam_adi>
<kisa_adi>string</kisa_adi>
<firma_link>string</firma_link>
</firma_link>
</Firma>
</FirmaGetirResult>
</FirmaGetirResponse>
</soap12:Body>
</soap12:Envelope>
SOAPExampleViewController.h
#import <UIKit/UIKit.h>
@interface SOAPExampleViewController : UIViewController
NSXMLParser *xmlParser;
NSMutableData *webData;
NSMutableString *soapResults;
BOOL recordResults;
@property(nonatomic, retain) NSMutableData *webData;
@property(nonatomic, retain) NSXMLParser *xmlParser;
@property(nonatomic, retain) NSMutableString *soapResults;
-(IBAction)buttonClick:(id)sender;
@end
SOAPExampleViewController.m
#import "SOAPExampleViewController.h"
@implementation SOAPExampleViewController
@synthesize xmlParser, webData, soapResults;
-(IBAction)buttonClick:(id)sender
NSString *firid = [NSString stringWithFormat:@"800"];
recordResults = NO;
NSString *soapMessage = [NSString stringWithFormat:
@"POST /webservice1.asmx HTTP/1.1\n"
"Host: example.com\n"
"Content-Type: application/soap+xml; charset=utf-8\n"
"Content-Length: length\n"
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n"
"<soap12:Body>\n"
"<FirmaGetir xmlns=\"http://tempuri.org/\">\n"
"<firID>%@</firID>\n"
"</FirmaGetir>\n"
"</soap12:Body>\n"
"</soap12:Envelope>\n",firid];
NSLog(@"%@", soapMessage);
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx?op=FirmaGetir"];
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/FirmaGetir" 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");
-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
[webData setLength:0];
NSHTTPURLResponse * httpResponse;
httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"HTTP error %zd", (ssize_t) httpResponse.statusCode);
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
[webData appendData:data];
//NSLog(@"webdata: %@", data);
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
NSLog(@"error with the connection");
[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(@"xml %@",theXML);
[theXML release];
NSString *responseString = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
NSLog(@"Respose Data :%@",responseString) ;
if(xmlParser)
[xmlParser release];
xmlParser = [[NSXMLParser alloc] initWithData:webData];
[xmlParser setDelegate:self];
[xmlParser setShouldResolveExternalEntities:YES];
[xmlParser parse];
[connection release];
[webData release];
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
if([elementName isEqualToString:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) //I'm trying
if(!soapResults)
soapResults = [[NSMutableString alloc]init];
recordResults = YES;
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
if(recordResults)
[soapResults appendString:string];
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
if([elementName isEqualToString:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) // I'm trying
recordResults = NO;
NSLog(@"%@", soapResults);
[soapResults release];
soapResults = nil;
【问题讨论】:
您的网址正在重定向到其他页面。请提供实际网址。 您确定这对您有用吗,因为您忘记将我试图解决这个问题大约一周。我不再搜索它了。使用 Web 服务的最佳方式是使用带有 JSON 的 WCF 服务。我找到了一个很好的例子。请关注本教程http://www.codeproject.com/Articles/405189/How-to-access-SQL-database-from-an-iPhone-app-Via
【讨论】:
【参考方案2】:或者只是尝试一个很棒的免费工具来生成你需要的所有类和代理。 wsdl2code.com
【讨论】:
【参考方案3】:替换下面的行
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx"];
这个。
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx/ServisKontrol"];
会有帮助的。
【讨论】:
【参考方案4】:在 SOAPAction 中将 http://tempuri.org/FirmaGetir
更改为 http://tempuri.org/ServisKontrol
。
您也可以参考此链接了解更多信息。 iPhone interaction with ASP.NET WebService
【讨论】:
对不起,这是我的错。我更改了代码,但仍然无法获取数据。 你的soap信息也有问题,请参考我的链接以上是关于从 iOS 上的 .net Web 服务获取数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 Asp.Net 在服务器上的 Web 应用程序文件夹之外获取 db 路径
使用 iOS 5 应用程序从 .Net Web 服务消费和解析 JSON 数据
从一个触发器,如何找出谁修改了表X上的数据,同时该用户从一个通用的dbuser登录,但从用户表获得了权利
如何使用Ajax从FastReport Web API获取报表