2014-03-04 86 views
0

我正在開發一個應用程序,我需要使用WSDL格式的SOAP webservice。如何在ios中使用SOAP服務進行身份驗證?

但它需要在使用服務之前進行身份驗證。

我不知道如何使用SOAP服務進行身份驗證。

我曾嘗試這樣的代碼: -

-(void)callAPI 
{ 

     NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"               "<wsdl:definitions name=\"hubbuchUser\"        targetNamespace=\"http://XXX.yy.com/soap/hubbuch/\"       xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\"        xmlns:tns=\"http://XXX.yy.com/soap/hubbuch/\"             xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"        xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\">\n"          "<wsdl:types></wsdl:types>\n"            "<wsdl:binding name=\"hubbuchUserBinding\" type=\"tns:hubbuchUserPortType\">" 
           "<soap:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" />" 
           "<wsdl:operation name=\"isValidDVN\">" 
           "<soap:operation soapAction=\"http://XXX.yy.com/soap/hubbuch/isValidDVN\" />" 
           "<wsdl:input>" 
           "<soap:body use=\"literal\" namespace=\"http://XXX.yy.com/soap/hubbuch/\" />" 
           "</wsdl:input>" 
           "<wsdl:output>" 
           "<soap:body use=\"literal\" namespace=\"http://XXX.yy.com/soap/hubbuch/\" />" 
           "</wsdl:output>" 
           "</wsdl:operation>" 
           "</wsdl:binding>" 

      "</wsdl:definitions>"]; 

     NSURL *url = [NSURL URLWithString:@"http://XXX.yy.com/soap/hubbuch/hubbuchUser.wsdl"]; 
     NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
     NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]]; 

     [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
     [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] ; 
      NSLog(@"Problem"); 
     } 
     else 
     { 
      NSLog(@"theConnection is NULL"); 
     } 

} 

    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
    { 
     [webData setLength: 0]; 
    } 

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
    { 
     [webData appendData:data]; 

    } 

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
    { 
     NSLog(@"ERROR with theConenction"); 

    } 

    -(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 is- %@ ", theXML); 

     NSData *myData = [theXML dataUsingEncoding:NSUTF8StringEncoding]; 

     NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:myData]; 

     // Don't forget to set the delegate! 
     xmlParser.delegate = self; 

     // Run the parser 
     [xmlParser parse]; 

    } 

    -(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName: 
    (NSString *)qName attributes:(NSDictionary *)attributeDict 
    { 
     //curDescription = [[NSString alloc]init]; 
     NSLog(@"attributeDict : %@",attributeDict); 
     NSLog(@"qName1 : %@",qName); 
     NSLog(@"elementName1 : %@",elementName); 

    } 

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
    { 
     //curDescription = string; 
     NSLog(@"string : %@",string); 
    } 

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
     namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
    { 
     //NSLog(@"3 : %@",curDescription); 


     NSLog(@"qName2 : %@",qName); 
     NSLog(@"elementName2 : %@",elementName); 

    } 

我怎樣才能做到這一點?

謝謝。使用這樣的附加標籤與數據庫名稱的NSString變量

+0

你嘗試過什麼,有什麼代碼與我們或做分享任何研究? –

+0

你可以請與我們分享一些細節信息?因爲iOS不支持所有SOAP服務。 – 2014-03-04 09:31:29

+0

@HappyCoding我編輯了我的問題。請檢查。 – AtWork

回答

0

試試這個代碼....

-(NSDictionary*) getTimeCardActivityDetailService:(NSString *)userName:(NSString *)passWord 
{ 
    NSString *dataBase = [self getDatabaseNameFromPlist]; 

strxml = @"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xyt=\"urn:xytechsystems.com/XytechAPILite\" xmlns:xyt1=\"http://schemas.datacontract.org/2004/07/Xytech.MP.API\" xmlns:arr=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"; 

strxml = [strxml stringByAppendingString:@"<soapenv:Header/>"]; 
strxml = [strxml stringByAppendingString:@"<soapenv:Body>"]; 
strxml = [strxml stringByAppendingString:@"<xyt:GetItemsiOS>"]; 

strxml = [strxml stringByAppendingString:@"<xyt:credentials>"]; 

strxml = [strxml stringByAppendingString:@"<xyt1:DBName>"]; 
strxml = [strxml stringByAppendingString:dataBase]; 
strxml = [strxml stringByAppendingString:@"</xyt1:DBName>"]; 

strxml = [strxml stringByAppendingString:@"<xyt1:Password>" ]; 
strxml = [strxml stringByAppendingString:passWord ]; 
strxml = [strxml stringByAppendingString:@"</xyt1:Password>" ]; 

strxml = [strxml stringByAppendingString:@"<xyt1:UserID>" ]; 
strxml = [strxml stringByAppendingString:userName ]; 
strxml = [strxml stringByAppendingString:@"</xyt1:UserID>" ]; 
strxml = [strxml stringByAppendingString:@"</xyt:credentials>"]; 

strxml = [strxml stringByAppendingString:@"<xyt:className>TimeCardActivities"]; 
strxml = [strxml stringByAppendingString:@"</xyt:className>"]; 

strxml = [strxml stringByAppendingString:@"<xyt:includeMetaData>"]; 
strxml = [strxml stringByAppendingString:@"FirstRowOnly"]; 
strxml = [strxml stringByAppendingString:@"</xyt:includeMetaData>"]; 
strxml = [strxml stringByAppendingString:@"<xyt:criteria>"]; 
strxml = [strxml stringByAppendingString:@"<xyt1:Criteria i:nil=\"true\"/>"]; 
strxml = [strxml stringByAppendingString:@"<xyt1:MaxRows>0</xyt1:MaxRows>"]; 

strxml = [strxml stringByAppendingString:@"</xyt:criteria>"]; 
strxml = [strxml stringByAppendingString:@"</xyt:GetItemsiOS>" ]; 
strxml = [strxml stringByAppendingString:@"</soapenv:Body>" ]; 
strxml = [strxml stringByAppendingString:@"</soapenv:Envelope>" ]; 


NSString * xmlResponse = [self callWSForGettingActivityDetail:strxml]; 
NSDictionary *activityDetailDic= [self loadDataFromXMLOfActivityDetail:xmlResponse]; 

/密碼(憑證)

+0

使用你的xml代碼結構而不是我的代碼。這正是我正在使用的。用你的xml標籤替換。如果仍然沒有解決你的問題,然後ping我,我會給你完整的文件.... –

相關問題