2010-04-05 4 views
2

Перед тем, как начать: Я программирование для Iphone, используя Objective C.Отправить параметры веб-службы

Я уже реализован вызов функции веб-службы с помощью NSURLRequest и NSURLConnection. Затем функция возвращает XML с необходимой мне информацией.

Код выглядит следующим образом:

NSURL *url = [NSURL URLWithString:@"http://myWebService/function"]; 
NSMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
NSURLConnection theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

я также реализованы методы

  • didRecieveResponse
  • didRecieveAuthenticationChallenge
  • didRecievedData
  • didFailWithError
  • подключениеDidFinishLoading.

И он отлично работает.

Мне нужно отправить 2 параметра в функцию: «местоположение» и «модуль».
Я попытался с помощью следующей модификации:

NSMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
[theRequest setValue:@"USA" forHTTPHeaderField:@"location"]; 
[theRequest setValue:@"DEVELOPMENT" forHTTPHeaderField:@"module"]; 
NSURLConnection theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

Но это не похоже на работу. Я что-то не так? есть ли способ узнать, использую ли я неправильные имена для параметров (возможно, это «Location» или «LOCATION», или это не имеет значения?)? или способ узнать, какие параметры функция ждет ...

Дополнительно:
У меня нет доступа к источнику веб-службы, так что я не могу изменить его. Но я могу получить доступ к WSDL. Человек, который произнес эту функцию, говорит, что есть все ... но я не могу понять. < ...

Любая помощь будет принята с благодарностью. :)

+0

Оп! Я рисую заголовок, где не место для этого ... но я был в отчаянии XD –

+0

Если вы можете получить доступ к WSDL, вы можете проверить wsdl2objc: http://code.google.com/p/wsdl2objc/ –

ответ

0

некоторые примеры о GET Публиковать SOAP

запрос GET

GET /index.html?userid=joe&password=guessme HTTP/1.1 
Host: www.mysite.com 
User-Agent: Mozilla/4.0 

Сообщение запроса

POST /login.jsp HTTP/1.1 
Host: www.mysite.com 
User-Agent: Mozilla/4.0 
Content-Length: 27 
Content-Type: application/x-www-form-urlencoded 

userid=joe&password=guessme 

мыло Запрос

POST /InStock HTTP/1.1 
Host: www.example.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 

<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 

<soap:Body xmlns:m="http://www.example.org/stock"> 
    <m:GetStockPrice> 
    <m:StockName>IBM</m:StockName> 
    </m:GetStockPrice> 
</soap:Body> 

</soap:Envelope> 

хозяина, User-Agent, Контент- Длина, Со ntent-Type - это элементы в заголовке запроса

0

Если есть WSDL, это, вероятно, веб-сервис SOAP, поэтому он, вероятно, ожидает какой-то SOAPy XML в качестве входных данных, и я не думаю, что вы это делаете. Посмотрите на этот вопрос, может быть: How to access SOAP services from iPhone

1

Вы задаете значения в HTTP-заголовке, а не в параметрах GET или POST в HTTP-запросе. Это, вероятно, не то, что вы хотите сделать.

Если сервер принимает параметры в запросах GET, вы могли бы быть в состоянии сделать что-то подобное в URL:

"http://myWebService/function?location=USA&module=DEVELOPMENT" 

В противном случае, вам придется пройти весь маршрут SOAP, как сказал MK.

+0

спасибо, я попробую это сначала nn –

+0

@ Примечание Alejandra: я только что исправил опечатку в строке URL: должно быть «?» перед параметрами, а не ";" так как у меня –

+0

не работает, кажется, мне нужно использовать SOAP. –

3

Принял меня на пару часов, чтобы получить эту работу, поэтому я подумал, что отправлю свое решение, чтобы оно сэкономило кому-то еще некоторое время в будущем. Вот как я получил цель-c для извлечения данных JSON из службы .NET WCF со строковым параметром.

(я использовал Wireshark для захвата клиент .net разговаривает с сервисом ФОС, так что я знал, что мне нужно, чтобы перейти от моего клиента IOS)

static NSString *feedURLString = @"http://www.mydomain.com/DownloadService.svc"; 
NSMutableURLRequest *faURLRequest = 
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:feedURLString]]; 

[faURLRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
[faURLRequest setHTTPMethod:@"POST"]; 
[faURLRequest addValue:@"http://tempuri.org/IDownloadService/GetChanges" forHTTPHeaderField:@"SOAPAction"]; 

NSString *localLastSync; 
if (userProfile.lastSync == nil) 
{ 
    localLastSync = @"2011-09-01T12:00:00"; 
} 
else 
{ 
    localLastSync = userProfile.lastSync; 
} 

NSString *soapMessage = [NSString stringWithFormat: 
         @"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" 
         "<s:Body >\n" 
         "<GetChanges xmlns=\"http://tempuri.org/\">\n" 
         "<lastSync>%@</lastSync>\n" 
         "</GetChanges>\n" 
         "</s:Body>\n" 
         "</s:Envelope>\n", localLastSync]; 
[faURLRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

self.downloadConnection = 
[[NSURLConnection alloc] initWithRequest:faURLRequest delegate:self]; 
Смежные вопросы