как отправить параметры в веб-сервисы через SOAP? - PullRequest
2 голосов
/ 07 апреля 2010

Перед тем, как начать: Я программирую для Iphone, используя цель C.

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

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

NSString *soapMessage = [NSString stringWithFormat:
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
        "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
     "<soap:Body>\n"
     "<function xmlns=\"http://tempuri.org/\" />\n"
     "</soap:Body>\n"
     "</soap:Envelope>\n"];

        NSURL *url = [NSURL URLWithString:@"http://myHost.com/myWebService/service.asmx"]; //the url to the WSDL

        NsMutableURLRequest theRequest = [[NSMutableURLRequest alloc] initWithURL:url];
     NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];

     [theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
     [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Lenght"];
     [theRequest setHTTPMethod:@"POST"];
     [theRequest addValue:@"myhost.com" forHTTPHeaderField:@"Host"];
     [theRequest addValue:@"http://tempuri.org/function" forHTTPHeaderField:@"SOAPAction"];
     [theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
     theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

Я в основном скопировал и изменил запрос мыла, который веб-сервис дал в качестве примера.

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

  • didRecieveResponse
  • didRecieveAuthenticationChallenge
  • didRecieveData
  • didFailWithError
  • connectionDidFinishLoading.

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

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

  NSString *soapMessage = [NSString stringWithFormat:
 @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
 "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
 "<soap:Body xmlns=\"http://tempuri.org/\" />\n"
    "<m:GetMonitorList>\n"
    "<m:location>USA</m:location>\n"
    "<m:module>DEVELOPMENT</m:module>\n"
    "</m:GetMonitorList>\n"
 "</soap:Body>\n"
 "</soap:Envelope>\n"];

Но не работает ... есть мысли, как мне его изменить?

Дополнительная информация:

  • похоже, работает ... вроде. Но веб-сервис ничего не возвращает.
  • При подключении метод didReceiveResponse выполнить один раз и метод didFinishLoading выполняется также. Но даже не один раз метод didReceiveData.
  • Интересно, даже если нет США места, он все еще отправит на хоть что то?
  • есть ли способ узнать, какие параметры, которые ожидает функция для

У меня нет доступа к источнику веб-службы, но я могу получить доступ к WSDL.

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Вы, вероятно, передаете службе сообщение, которое недействительно. Вы должны взглянуть на WSDL; внутри него должна быть одна или несколько схем или документов схемы. Они расскажут вам, как вы можете построить тело сообщения SOAP.

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

Я испытывал вашу проблему раньше, когда разрабатывал код, подобный приведенному вами. Проверьте ваш файл WSDL снова, и вам нужно запросить одно SOAP-сообщение в одном классе, иначе ваши методы (приведенные в первой части) вашего вопроса будут быть столкновением.

Пожалуйста, перейдите по следующей ссылке, надеюсь, она вам поможет ...

1) kosmaczewski.net

2) http://icodeblog.com/2008/11/03/iphone-programming-tutorial-intro-to-soap-web-services/

3) http://viium.com

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