Я разрабатываю приложение для iPhone, которое отправляет SOAP-сообщения в .NET Webservice для вызова нескольких WebMethods. Эти методы получают данные из базы данных и возвращают их в сообщении SOAP обратно на iPhone.
Когда я отправляю сообщение SOAP, которое вызывает WebMethod без каких-либо параметров, оно работает просто отлично.
Но когда я передаю параметр с сообщением, параметр webMethod остается нулевым в отладчике Visual Studio. Похоже, что WebMethod ничего не получает.
Я использовал сетевой сниффер, чтобы просмотреть входящие пакеты, и заметил, что сообщение SOAP нормально, когда оно приходит. Так что это должно быть что-то на стороне веб-сервиса, которое идет не так.
Вот код:
WebMethod:
public class ZDFMobielWebservice : System.Web.Services.WebService
{
[WebMethod]
public string getVerzekerde(string bsn)
{
string result = bsn;
ZDFKoppeling koppeling = new ZDFKoppeling();
result = koppeling.getData(Convert.ToInt32(bsn));
return result;
}
}
Функция, которая создает SOAP-сообщение:
-(IBAction)buttonClick:(id)sender
{
recordResults = FALSE;
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"
"<getVerzekerde xmlns=\"http:/meijberg.topicus.local/zdfmobiel\">\n"
"<bsn>%@</bsn>\n"
"</getVerzekerde>\n"
"</soap:Body>\n"
"</soap:Envelope>\n", bsnInput.text
];
NSLog(soapMessage);
NSURL *url = [NSURL URLWithString:@"http://meijberg.topicus.local/ZDFMobielWebservice.asmx"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue: @"http://meijberg.topicus.local/zdfmobiel/getVerzekerde" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if( theConnection )
{
webData = [[NSMutableData data] retain];
}
else
{
NSLog(@"theConnection is NULL");
}
//[nameInput resignFirstResponder];
}
А вот и SOAP-сообщение:
<?xml version="1.0" encoding="utf-8"?>
<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/">
<soap:Body>
<getVerzekerde xmlns="http:/meijberg.topicus.local/zdfmobiel">
<bsn>999999999</bsn>
</getVerzekerde>
</soap:Body>
</soap:Envelope>
Кто-нибудь, кто знает, в чем может быть проблема?
РЕДАКТИРОВАТЬ: Когда я вызываю веб-метод с веб-страницы, автоматически генерируемой веб-сервером, он работает хорошо. Затем параметр заполняется введенным мною значением.