2011-09-08 166 views
6

我想从iOS应用程序调用.NET ASMX服务。我创建了这样的SOAP消息:从iOS应用程序发送参数到SOAP ASMX服务

-(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]; 


} 

上面的代码工作正常,但您可以看到我必须手动创建SOAP消息。有没有什么方法可以传入参数,方法名称和soap body/message是自动创建的。 StackOverFlow上有一个例子用于相同的场景,但我无法找到它。

+0

你有这个运气吗? – zaitsman

+0

@zaitsman,看看我刚刚发布的答案...都有点过时,但这可能会帮助你? – Purpletoucan

回答

0

假设您可以为您的服务生成WSDL,我建议您查看适用于iOS的WSDL2SOAP。我曾经在一个历史项目中使用这个(2+年前),效果不错: -

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

这是你指向一个WSDL的应用程序,它会自动生成类供您使用访问SOAP服务。我不能保证它仍然有效,但我建议您进行调查,因为它可以轻松处理SOAP。请记住,库(除非最近更新)是ARC之前的版本,因此除了文档中的安装步骤之外,还需要标记此内存管理。

相关问题