Параметр Webmethod остается нулевым - PullRequest
1 голос
/ 22 сентября 2009

Я разрабатываю приложение для 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>

Кто-нибудь, кто знает, в чем может быть проблема?

РЕДАКТИРОВАТЬ: Когда я вызываю веб-метод с веб-страницы, автоматически генерируемой веб-сервером, он работает хорошо. Затем параметр заполняется введенным мною значением.

Ответы [ 2 ]

1 голос
/ 23 сентября 2009

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

Я использовал инструмент 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 голосов
/ 12 декабря 2010

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

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

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

<getVerzekerde xmlns=\"http:/meijberg.topicus.local/zdfmobiel/\">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...