Отправить параметры в веб-сервис - PullRequest
2 голосов
/ 06 апреля 2010

Прежде чем я начну: я программирую для Iphone, используя цель 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
  • didRectainedData
  • didFailWithError
  • connectionDidFinishLoading.

И это прекрасно работает.

Теперь Мне нужно отправить 2 параметра в функцию: "location" и "module".
Я попытался использовать следующую модификацию:

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

Но, похоже, это не работает.Я делаю что-то не так?Есть ли способ узнать, использую ли я неправильные имена для параметров (как, может быть, это «Расположение» или «МЕСТО» или это не имеет значения?)?или способ узнать, какие параметры является функцией, ожидающей ...

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

Любая помощь будет оценена.:)

Ответы [ 4 ]

3 голосов
/ 10 января 2012

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

(я использовал wireshark для захвата клиента .net, обращающегося к сервису wcf, поэтому я знал, что мне нужно передать из моего 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];
1 голос
/ 06 апреля 2010

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

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

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

Если это не удастся, вам придется пройти полный маршрут SOAP, как сказал MK.

0 голосов
/ 06 апреля 2010

несколько примеров о GET Post SOAP

GET request

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

Post request

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

Soap Request

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>

HOST, User-Agent, Content-Length, Content-Type являются элементами в заголовке запроса

0 голосов
/ 06 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...