Перед тем, как начать: Я программирую для 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.