2011-09-08 13 views
6

Chcę wywołać usługę .NET ASMX z aplikacji iOS. Stworzyłem moje komunikaty SOAP w ten sposób:Wysyłanie parametrów do usługi SOAP ASMX z aplikacji iOS

-(IBAction)submitButtonClicked:(id)sender 
{ 
     NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8080/NotificationService.asmx"]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setRequestMethod:@"POST"]; 
    [request addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8"]; 
    [request addRequestHeader:@"SOAPAction" value:@"http://tempuri.org/HelloWorld"]; 


    NSString *soapMessage = [NSString stringWithFormat: 
          @"<?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>" 
          "<Greet xmlns=\"http://tempuri.org/\">" 
          "<deviceToken>some device token</deviceToken>" 
          "<userName>azamsharp</userName>" 
          "</Greet>" 
          "</soap:Body>" 
          "</soap:Envelope>"]; 

    NSString *messageLength = [NSString stringWithFormat:@"%d",[soapMessage length]]; 

    [request addRequestHeader:@"Content-Length" value:messageLength]; 

    [request appendPostData:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

    [request setDelegate:self]; 
    [request startAsynchronous]; 


} 

Powyższy kod działa, ale jak widać muszę ręcznie utworzyć komunikat SOAP. Czy istnieje sposób, aby po prostu przekazać parametry, a nazwa metody i treść/wiadomość mydła są tworzone automatycznie. W tym samym scenariuszu był przykład na StackOverFlow, ale nie jestem w stanie go znaleźć.

+0

Czy masz na to szczęście? – zaitsman

+0

@zaitsman, spójrz na odpowiedź, którą właśnie napisałem ... wszystko trochę przestarzałe, ale to może ci pomóc? – Purpletoucan

Odpowiedz

0

Zakładając, że możesz wygenerować WSDL dla swoich usług, polecam przyjrzeć się WSDL2SOAP dla iOS. Użyłem tego w historycznym projekcie (2+ lat temu) i to działa dobrze: -

http://code.google.com/p/wsdl2objc/

Jest to aplikacja, które wskazują na WSDL i automatycznie generuje klas do użycia, aby uzyskać dostęp Usługi SOAP. Nie mogę ręczyć za to, że nadal działa, ale polecam zbadać, ponieważ ułatwia on obsługę SOAP. Pamiętaj, że biblioteka (o ile nie została niedawno zaktualizowana) jest w wersji przed ARC, więc oprócz czynności instalacyjnych w dokumentach musisz oznaczyć to jako odpowiednie do zarządzania pamięcią.

Powiązane problemy