5

I have one .Net web service and I use it for mobile apps. I used it on windows phone and android apps but I didn't get data from it on iOS yet. For example, there is one method in my web service and it takes one parameter. How can I get data from returning value ? I found one example on internet and I edited it but I can't get data. All of code is here. In this case I need a sample code. Thanks for attention.

web service's information:

namespace : http://tempuri.org url : http://www.example.com/webservice1.asmx method name : FirmaGetir parameter name: firID (string)

Web service request:

    POST /webservice1.asmx HTTP/1.1
Host: example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <FirmaGetir xmlns="http://tempuri.org/">
      <firID>string</firID>
    </FirmaGetir>
  </soap12:Body>
</soap12:Envelope>

Returning data:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <FirmaGetirResponse xmlns="http://tempuri.org/">
      <FirmaGetirResult>
        <Firma>
          <firma_adi>string</firma_adi>
          <adres>string</adres>
          <telefon>string</telefon>
          <id>string</id>
          <sektor>string</sektor>
          <alt_sektor>string</alt_sektor>
          <alt_sektor_adi>string</alt_sektor_adi>
          <servis>string</servis>
          <map>string</map>
          <slogan>string</slogan>
          <sayfaGosterimi>int</sayfaGosterimi>
          <gpsilce>string</gpsilce>
          <gpssemt>string</gpssemt>
          <gpspk>string</gpspk>
          <duyuru>
            <baslik>string</baslik>
            <icerik>string</icerik>
            <link>string</link>
            <image>string</image>
          </duyuru>
          <firma_link>
            <tam_adi>string</tam_adi>
            <kisa_adi>string</kisa_adi>
            <firma_link>string</firma_link>
          </firma_link>
        </Firma>
      </FirmaGetirResult>
    </FirmaGetirResponse>
  </soap12:Body>
</soap12:Envelope>

SOAPExampleViewController.h

#import <UIKit/UIKit.h>
@interface SOAPExampleViewController : UIViewController 
{
    NSXMLParser *xmlParser;
    NSMutableData *webData;
    NSMutableString *soapResults;
    BOOL recordResults;
}

@property(nonatomic, retain) NSMutableData *webData;
@property(nonatomic, retain) NSXMLParser *xmlParser;
@property(nonatomic, retain) NSMutableString *soapResults;

-(IBAction)buttonClick:(id)sender;

@end

SOAPExampleViewController.m

#import "SOAPExampleViewController.h"

@implementation SOAPExampleViewController
@synthesize xmlParser, webData, soapResults;


-(IBAction)buttonClick:(id)sender
{
    NSString *firid = [NSString stringWithFormat:@"800"];
    recordResults = NO;
    NSString *soapMessage = [NSString stringWithFormat:
                         @"POST /webservice1.asmx HTTP/1.1\n"
                         "Host: example.com\n"
                         "Content-Type: application/soap+xml; charset=utf-8\n"
                         "Content-Length: length\n"

                         "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                         "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n"
                         "<soap12:Body>\n"
                         "<FirmaGetir xmlns=\"http://tempuri.org/\">\n"
                         "<firID>%@</firID>\n"
                         "</FirmaGetir>\n"
                         "</soap12:Body>\n"
                         "</soap12:Envelope>\n",firid];
    NSLog(@"%@", soapMessage);
    NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx?op=FirmaGetir"];
    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://tempuri.org/FirmaGetir" 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");
    }
}

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
    [webData setLength:0];
     NSHTTPURLResponse * httpResponse;
    httpResponse = (NSHTTPURLResponse *) response;
    NSLog(@"HTTP error %zd", (ssize_t) httpResponse.statusCode);
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
{
    [webData appendData:data];
    //NSLog(@"webdata: %@", data);
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
{
    NSLog(@"error with the connection");
    [connection release];
    [webData release];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received bytes %d", [webData length]);
    NSString *theXML = [[NSString alloc] initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    NSLog(@"xml %@",theXML);
    [theXML release];
    NSString *responseString = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
    NSLog(@"Respose Data :%@",responseString) ;
    if(xmlParser)
    {
        [xmlParser release];
    }
    xmlParser = [[NSXMLParser alloc] initWithData:webData];
    [xmlParser setDelegate:self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];
    [connection release];
    [webData release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
    if([elementName isEqualToString:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) //I'm trying
    {
            if(!soapResults)
        {
            soapResults = [[NSMutableString alloc]init];
        }
        recordResults = YES;
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(recordResults)
    {
        [soapResults appendString:string];
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) // I'm trying
    {
        recordResults = NO;
        NSLog(@"%@", soapResults);
        [soapResults release];
        soapResults = nil;
    }
}
2
  • Your url is redirecting to some other page.Give actual url. Commented Feb 15, 2013 at 5:28
  • Are you sure this works for you in anyway because you forgot to add <NSXMLParserDelegate> to your .h file for xml parsing. Commented Jul 1, 2013 at 7:24

4 Answers 4

3

Replace the line below

 NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx"];

by this one.

 NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx/ServisKontrol"];

It will help.

Sign up to request clarification or add additional context in comments.

Comments

2

or just try a great free tool that generates you all the classes and proxy u need. wsdl2code.com

Comments

2

I was trying solve this issue about one week. I don't search anymore about it. The best way for consuming web service is using WCF services with JSON. I found an excellent example about of it. Please follow this tutorial http://www.codeproject.com/Articles/405189/How-to-access-SQL-database-from-an-iPhone-app-Via

Comments

1

Change http://tempuri.org/FirmaGetir with http://tempuri.org/ServisKontrol in SOAPAction. Also you can refer this link for more information. iPhone interaction with ASP.NET WebService

2 Comments

sorry it's my fault. I change my code, but still I can't get data.
There are some problem in your soap message also, please refer my link

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.