我正在尝试在我的应用中使用此网络服务(只是尝试使用网络服务):http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit以下是我正在使用的代码:
- (void)viewDidLoad {
[super viewDidLoad];
// create a soap Message which is given in your required web service
// create a url to your asp.net web service.
NSURL *tmpURl=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.w3schools.com/webservices/tempconvert.asmx?op=CelsiusToFahrenheit"]];
// create a request to your asp.net web service.
NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:tmpURl];
NSString * params = [[NSString alloc] initWithFormat:@"Celsius = 32"];
myWebData = [[NSMutableData alloc] init];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
connection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
}
// a method when connection receives response from asp.net web server
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[myWebData setLength: 0];
}
// when web-service sends data to iPhone
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[myWebData appendData:data];
NSString *receivedDataString = [[NSString alloc] initWithData:myWebData encoding:NSUTF8StringEncoding];
NSLog(@"%@",receivedDataString);
}
// when there is some error with web service
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
// when connection successfully finishes
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// check out your web-service retrieved data on log screen
NSString *theXML = [[NSString alloc] initWithBytes: [myWebData mutableBytes] length:[myWebData length] encoding:NSUTF8StringEncoding];
NSLog(@"%@",theXML);
[theXML release];
}
在NSString theXML中,我得到了一些响应,也有一些错误。 以下是我在调试器中得到的响应:
WebServiceTutorial [474:207] soap:ReceiverServer无法 处理请求。 --->数据在 根级别无效。第1行, 位置 1。
谢谢,
答案 0 :(得分:0)
您正在将请求发送到错误的网址。
试试NSURL *tmpURl=[NSURL URLWithString:[NSString stringWithFormat:@"http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit"]];
除此之外,你应该设置Content-Type和Content-Length:
NSString *postLength = [NSString stringWithFormat:@"%d", [params length]];
[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
答案 1 :(得分:0)
我相信你得到的是一个.NET错误。原因可能是因为您正在连接到SOAP Web服务。在iOS中,没有本机SOAP协议实现。
本质上,SOAP通过将一些标准XML发送到发送到服务器的请求主体来工作。只是连接到该Web地址并不意味着您正在与Web服务进行通信,这就是.NET为您提供错误的原因。即使您使用浏览器访问该网址并且它似乎正常工作,该网站本身也会为您执行所有SOAP-ing,因此您不了解它。
您有两种选择。 create a soap request from scratch或在测试中使用REST服务。 REST服务就像你假设这个工作一样。 REST服务只是一种说法“只需通过访问http地址即可访问的Web服务”的一种奇特方式。