2011-09-08 19 views
6

iOSアプリケーションから.NET ASMXサービスを呼び出したいとします。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メッセージを作成する必要があります。パラメーターとメソッド名を渡すだけの方法はありますか?そして、本体/メッセージは自動的に作成されます。 StackOverFlowには、同じ厳密なシナリオの例がありましたが、見つけることができません。

+0

これで運が良かったですか? – zaitsman

+0

@zaitsman、ちょうど私が投稿した答えを見て...すべてのビット日付ですが、これはあなたを助けるかもしれない? – Purpletoucan

答えて

0

サービスのWSDLを生成できるとすれば、iOS用のWSDL2SOAPを参照することをお勧めします。私は歴史的なプロジェクトでこれを使用している(2年以上前)、それがうまく機能: - これはあなたがWSDLをポイントするアプリです

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

、あなたがアクセスするために使用することは自動的にクラスを生成しますSOAPサービス。それでも動作することを保証することはできませんが、SOAP処理を容易にするために調査することをお勧めします。ライブラリ(最近更新されていない限り)はARC前ですので、ドキュメントのインストール手順に加えて、適切なメモリ管理のためにこれをフラグする必要があります。

関連する問題