从iOS应用程序向SOAP ASMX服务发送参数

时间:2011-09-08 15:00:52

标签: ios web-services

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

    -(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正文/消息。 StackOverFlow上有一个示例用于相同的场景,但我无法找到它。

1 个答案:

答案 0 :(得分:0)

假设您可以为您的服务生成WSDL,我建议您查看适用于iOS的WSDL2SOAP。我在一个历史项目(2年多以前)中使用过它并且效果很好: -

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

这是一个指向WSDL的应用程序,它会自动生成用于访问SOAP服务的类。我不能保证它仍然可以工作,但我建议调查,因为它使SOAP处理变得容易。请记住,库(除非最近更新)是ARC之前的,因此除了文档中的安装步骤之外,您还需要将其标记为适当的内存管理。