如何从iPhone访问SOAP服务
我打算为iPhone开发一个应用程序,该应用程序将不得不访问几个SOAP服务。 在iPhone SDK中进行一些基本的检查时,我无法find任何访问SOAP服务的支持,有一点Google导致了在iPhone SDK中不支持SOAP的结论。
所以如果我想要构build这个应用程序,我需要想出一个从iPhone访问SOAP服务的方法。 什么是最好的方法? 任何最佳实践? 有人已经使用iPhone SDK中的function编写库来访问SOAP服务吗?
(由于我需要访问的服务被另一方公开,并且只将它公开为SOAP,所以不幸的是,不能切换到另一种types的接口(例如基于REST的API)。
格罗
一个字:不要。
很明显,这不是一个真正的答案。 但是仍然应该不惜一切代价避免SOAP。 ;-)是否可以在iPhone和Web服务之间添加代理服务器? 也许是将REST转换为SOAP的东西?
您可以尝试CSOAP ,这是一个依赖libxml2(包含在iPhone SDK中)的SOAP库。
我已经为OSX编写了自己的SOAP框架 。 然而,它不被主动维护,需要一些时间才能移植到iPhone(您需要用TouchXMLreplaceNSXML作为开始)
我的解决scheme是让代理服务器接受REST,发出SOAP请求,并使用PHP返回结果。
实施时间:15-30分钟。
不是最优雅,但坚实。
在历史上,我在低级别(XML生成和parsing)中进行了自己的访问,以处理偶尔需要从Objective-C执行SOAP样式请求的需求。 也就是说,有一个名为SOAPClient( soapclient )的库,它是开放源代码(BSD许可证),可以在Google Code( mac-soapclient )上find,这可能是有趣的。
我不会certificate它的能力或有效性,因为我从来没有使用它或必须使用它的API,但它是可用的,并可能为您提供一个快速的解决scheme,根据您的需要。
苹果曾经有一个叫做WS-MakeStubs的非常糟糕的工具。 我不认为它可以在iPhone上使用,但是您也可能对开源库感兴趣,以替代它 – 代码生成Objective-C与SOAP客户端进行交互。 再一次,我没有使用它 – 但我已经在笔记中标记了它: wsdl2objc
你可以使用我find的工具连接http://www.wsdl2code.com
SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR URL" AndDelegate:self]; [proxy GetDouble]; [proxy GetEnum]; [proxy getEnum:kTestEnumTestEnum2]; [proxy GetInt16]; [proxy GetInt32]; [proxy GetInt64]; [proxy GetString]; [proxy getListStrings];
看看这个链接和他们的路线图。 他们有RO | C的路上,可以连接到他们的Web服务,这可能包括SOAP(我使用的VCL版本,肯定包括它)。
看看在ios_plugin下的下载包中包含两个iOS示例的gsoap。 该工具将WSDL转换为SOAP和XML REST的代码。