Consumeren van WCF Web Service met Objective-C op de iPhone

Ik heb een harde tijd het consumeren van een zeer eenvoudige (Hallo Wereld) WCF web service in mijn iPhone-app. Van wat ik heb gelezen, moet u het handmatig maken van de request-bericht verzenden om de webservice-URL.

Ik was in staat om dit te doen op een .asmx-web-service, maar niet met een WCF-service.

Hoe weet ik de juiste indeling van de aanvraag SOAP-bericht?

De web service ben ik het proberen te raken heeft een formaat van:
http://xxx.xxx.xxx.xxx:PORT/IService1/ (lokaal werkt in een VM)

Mijn excuses voor het ontbreken van informatie, ben ik behoorlijk verloren.

Alle hulp wordt zeer gewaardeerd.

  • JWD, ik ben benieuwd kunt u het detecteren van de dienstverlening met behulp van wcftestclient? Is dit een extern gehoste service of bent u het uitvoeren van het lokaal?
  • Ik kan bekijken en te roepen met behulp van wcftestclient, het is op mijn macbook in een windows XP VMWare-image, de binnenkant van visual studio.
InformationsquelleAutor JWD | 2009-06-11

 

6 Replies
  1. 46

    Dank aan iedereen die heeft geholpen hier. Uiteindelijk heb ik om uit te vinden en dacht dat ik zou delen met mijn resultaten. Ik weet dit is niet een volledige oplossing, dus schiet me een bericht of reactie achter als je meer detail.

    //Variables used
    NSMutableData *webData;
    NSMutableString *soapResults;
    NSXMLParser *xmlParser;
    BOOL recordResults;
    
    //Web Service Call
    NSString *soapMessage = [NSString stringWithFormat:
    @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
    "<SOAP-ENV:Envelope \n"
    "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n"
    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n" 
    "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
    "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" \n"
    "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"> \n"
    "<SOAP-ENV:Body> \n"
    "<Login xmlns=\"http://tempuri.org/\"><username>JACKSON</username><password>PASSWORD</password>"
    "</Login> \n"
    "</SOAP-ENV:Body> \n"
    "</SOAP-ENV:Envelope>"];
    
    NSURL *url = [NSURL URLWithString:@"http://172.16.0.142:8731/Service1/"];               
    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/IService1/Login" 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");
    }
    
    //Implement the NSURL and XMLParser protocols
    #pragma mark -
    #pragma mark NSURLConnection methods
    
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    
    #pragma mark -
    #pragma mark XMLParser methods
    
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName
       attributes:(NSDictionary *)attributeDict 
    
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName
    • Hi. Ik probeer toegang te krijgen tot een svc-bestand op een vergelijkbare manier, maar niet op een antwoord – stackoverflow.com/questions/1327673/…. Kan echt helpen! Bedankt.
    • u [email protected]#$ing rock!
    • Hi, ik ben op zoek om te consumeren, een svc-web methode die verwacht een object met afbeelding en een string als parameter….Ik ben een beetje in de war te maken van de post-methode voor hetzelfde….enig advies geven??
    • Ik ben ook proberen om toegang te krijgen tot de web-service & nagelaten in het openen met de gewenste resultaten.. Kan ik alle hulp van u?
    • Hey bro, ik probeer dezelfde als de jouwe. Heeft u gevonden geen oplossing?
    • wilt u misschien een aparte vraag als je een specifiek probleem (en het antwoord niet helpen)
    • Hey bedankt bro voor het antwoord. Ik heb al gepost vraag & opgericht het antwoord op mijn eigen – stackoverflow.com/questions/14910135/svc-webservice-objective-c
    • doen we nodig hebben om eventuele veranderingen in de WCF-service toegang vanuit de iOS-app?
    • Hoe te passeren voor de verificatie van de identificatie met de Sharepoint-site.
    • Werkte voor mij, maar ik moet gebruik maken van de Dienst.svc in de URL, “172.16.0.142:8731/Service1/Service.svc” en moet ook het gebruik van welke methoden die u nodig hebt om te bellen in de Headers van het bericht.

  2. 2

    Wat voor error krijg je wanneer je in onze service WCF? Dus asmx het werk is, maar niet WCF? Een ding dat je nodig hebt om aandacht te besteden is dat in .NET 2.0, web services (asmx -) ondersteund zowel SOAP 1.1 en SOAP 1.2 berichten. Echter, basicHttpBinding in WCF verwerkt alleen de SOAP 1.1. Dus als je het verzenden van SOAP 1.2 berichten van je iPhone client naar de WCF-service met basicHttpBinding, dit zou heel goed het probleem dat u ondervindt. Ter ondersteuning van SOAP 1.2, moet u gebruik maken van wsHttpBinding of het maken van een aangepaste bindend vrij veel het zelfde als basicHttpBinding maar geef je de boodschap versie van SOAP 1.2.

    <customBinding>
      <binding name="customHttpBindingWithSoap12">
         <textMessageEncoding messageVersion="Soap12"/>
         <httpTransport />              
      </binding>
    </customBinding>   
  3. 0

    Heb je geprobeerd om toegang te krijgen tot de WCF-service als een webservice van een windows-client? Ik heb nog niet geconfigureerd WCF in te voeren als een asmx-stijl Web Service, maar ik geloof dat er een aantal specifieke instellingen die worden getweakt om WCF te handelen op die manier. Het werken met een windows-client zou elke iphone thema ‘ s uit de foto voor test doeleinden en u zou helpen te smal je het testen van de dienst zelf.

    • Ik heb niet geprobeerd een windows-client, alleen de WCF-Test-Client die draait vanuit Visual Studio. Ik geloof dat de service wordt uitgevoerd correct, mijn vraag is meer gericht op het consumeren van met objective C op de iPhone.
  4. 0

    Je nodig hebt om ervoor te zorgen dat u BasicHttpBinding (niet WSHttpBinding) die gericht zijn op klanten die niet op de .NETTO 3.0 platform. Deze Binding biedt geen ondersteuning voor de veiligheid, de betrouwbaarheid of de bestelde levering.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *