2009-09-22 2 views
1

Я разрабатываю приложение iPhone, которое отправляет SOAP-сообщения в .NET Webservice для вызова нескольких WebMethods. Эти методы получают данные из базы данных и возвращают их в SOAP-сообщении обратно на iPhone.Параметр webmethod stay null

Когда я отправил сообщение 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> 

Любой, кто знает, в чем проблема может быть проблемой?

EDIT: Когда я вызываю веб-метод с веб-страницы, которая автоматически генерируется веб-сервером, она работает хорошо. Затем параметр заполняется введенным значением.

ответ

1

После многих поисков в Интернете я нашел ответ.

Я использовал инструмент SoapUI (http://www.soapui.org/), чтобы отправить несколько мыльных сообщений на мой веб-сервис. SoapUI отобразило сообщение XML, которое оно отправило в веб-службу, поэтому я узнал, что синтаксис моего сообщения в приложении iPhone неверен.

Вместо:

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 
    ]; 

Он должен быть таким:

NSString *soapMessage = [NSString stringWithFormat: 
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:zdf=\"http://meijberg.topicus.local/zdfmobiel\">\n" 
"<soapenv:Body>\n" 
"<zdf:getVerzekerde>\n" 
"<zdf:bsn>%@</zdf:bsn>\n" 
"</zdf:getVerzekerde>\n" 
"</soapenv:Body>\n" 
"</soapenv:Envelope>\n", bsnInput.text 
]; 

Тем не менее, я не понимаю, почему это работает .. Наверное, это что-то делать с полу- двоеточие, которые находятся во всех тегах. Может кто-нибудь объяснить это?

+0

У меня есть один и тот же вопрос, но в моем sceraio звонящий является приложением окна который создает мыло xml и отправляет xml через MSXML, вы считаете, что использование вышеуказанных ключевых слов в моем случае может исправить проблему? – Zich

0

В этой строке:

<getVerzekerde xmlns=\"http:/meijberg.topicus.local/zdfmobiel\"> 

вам нужно поставить косую черту после адреса (после zdfmobiel):

<getVerzekerde xmlns=\"http:/meijberg.topicus.local/zdfmobiel/\"> 
+0

Можете ли вы опубликовать это как отредактировать, тем самым позволяя ответу стать полным и самодостаточным? – Shreeni

Смежные вопросы