2009-04-07 15 views
1

私のiPhoneアプリケーションは、既存の.NET SOAP Webサービスにオブジェクトを送信して、データベースサーバに保存できるようにする必要があります。私は、これを行う最も簡単な方法は、オブジェクトのXML表現を構築し、それをWebサービスに渡すことだと考えました。しかし、これは動作していないようです。 XMLのレベルが1つ以上深い場合、Webサービスメソッドは呼び出されないように見えます(Webサービスメソッドは、呼び出し時にイベントログにエントリを書き込みます)。iPhoneから.NET SOAP WebサービスにXMLを送信する際の問題

例えばXMLがある場合:

<Name>Jim</Name> 

Webサービスメソッドが呼び出され、Webサーバー上のイベントログのエントリがあります。

XMLの場合:

Webサービスメソッドが呼び出されない
<Person><Name>Jim</Name></Person> 

(イベントログにエントリがありません)。ここで

は、Webサービスメソッドの定義である:

public string SubmitiPhoneObject(string theObjectAsXml) { 
    WriteToEventLog("Begin Service.SubmitiPhoneObject"); 
    // Do some work… 
} 

そして、ここで私はiPhoneから送信していますSOAPリクエストです:

<?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> 
    <SubmitiPhoneObject xmlns="http://www.myServer.com/iPhoneService/"> 
     <theObjectAsXml> 
      <TheObject> 
       <PersonID>5263</PersonID> 
       <DepartmentID>379</DepartmentID> 
      </TheObject> 
     </theObjectAsXml> 
    </SubmitiPhoneObject> 
</soap:Body> 

誰もが任意のアイデアを持っている理由ウェブサービスメソッドが呼び出されていませんか?誰でも、iPhoneアプリケーションからオブジェクトをWebサービスに提出する方法についてのより良い/より簡単な提案がありますか?

ありがとうございます!

答えて

2

答えをいただきありがとうございます。私はXML文字列を渡してサーバーでデコードする前にエンコードを終了しました。 iPhoneで

私が使用:

[xml stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] 

をエンコードを行うこと。

そして、私はデコードを行うために

Server.UrlDecode 

を使用し、サーバー上。これまで働いていたようだ。

+0

ありがとうございます。私はグーグル・グーグルの4日後にこの答えを得た。 – Soniya

1

完全なSOAP処理は、通常、iPhoneや他のモバイルデバイスにとって理想的なものよりも少しリソース集約的だと考えられているので、必要なXMLを直接生成する方法はおそらく良い方法です。

これをデバッグするには、このリクエストを送信するときにサーバーから返信する応答XMLを取得することをお勧めします。その応答は、サーバー上で何が行われたか、遭遇したエラーについての詳細情報を提供します。お役に立てれば!

+0

これは問題の1つですが、Webメソッドが呼び出されることはなく、Webサービスから返される応答XMLはありません。 – Billy

0

これはあまりにも一般的な質問です。

iPhoneから.NETに送信できないと言っています。しかし、どこからでも提出できますか?

  • できない場合、iPhoneは数式から外れ、これは.NETの問題です。

  • 可能であれば、成功したリクエストとiPhoneで作成されたものの違いを確認してください。 iPhoneは

    • 何かを生成する場合、有効なSOAPリクエストではありません。

      .NETは、式から外れ、これはあなたのXMLシリアル化の問題です。

      • と同じになるようにiPhone XMLシリアル化を微調整:あなたは2つのオプションがあります。この場合

      • は、有効なSOAPリクエストですが、ウェブサービスによって認識取得されていません成功したもの
      • 問題を.NETの人に報告します。

      私は両方を行うことをお勧めします。

リクエストが単純な場合は、ちょうどiPhoneにそれを文字列として格納することは現実的な選択肢かもしれません。

1

サービスに送信するメッセージを作成するには、soapUIを使用してください。

1

SOAPを使用する必要がある場合(単純に使用するのが難しくなります)、手動でローリングする代わりにWSDL2ObjCを使用して通信コードを生成することを検討してください。

ウェブサービスにデータを送信しようとしたとき

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

0

objective-c wrapper given hereは素晴らしい作品。 XMLをWebサービスに送信する場合は、XMLの内容をNSDataオブジェクトに読み込んで、そのNSDataをHTTPリクエストの本体として渡します。これは期待どおりに動作します。

関連する問題