Как получить точное значение из ответа, который я получаю от веб-службы? - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь использовать этот веб-сервис в своем приложении (просто чтобы попробовать свои силы в работе с веб-сервисами): 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] мыло: ReceiverServer не удалось обработать запрос. ---> Данные на Корневой уровень недействителен. Строка 1, позиция 1.

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 июня 2011

Я верю, что вы получаете ошибку .NET. Возможно, причина в том, что вы подключаетесь к веб-службе SOAP. В iOS нет собственной реализации протокола SOAP.

По сути, SOAP работает путем отправки некоторого стандартного XML в тело запроса, отправляемого на сервер. Простое подключение к этому веб-адресу не означает, что вы общаетесь с веб-службой, поэтому .NET выдает ошибку. Даже если вы переходите по этому веб-адресу с помощью браузера и он работает, сам сайт выполняет все действия SOAP для вас, поэтому вы об этом не знаете.

У вас есть два варианта. Либо создайте запрос на мыло с нуля , либо используйте службу REST в своем тесте. Службы REST действуют так же, как вы предполагаете, что этот работает. Службы REST - это просто причудливый способ сказать «веб-службы, к которым можно обратиться, просто перейдя по адресу http».

Вот еще один пример SOAP

0 голосов
/ 20 июня 2011

Вы отправляете запрос на неправильный URL.Попробуйте 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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...