2011-07-02 10 views
0
にWCFへのPOSTデータを送信

チタンのためのコードです:チタン

以下
var request = Titanium.Network.createHTTPClient(); 

     request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage/"+ bh.userID + "/" + bh.logic.profile.userID); 
     request.setRequestHeader("enctype", "multipart/form-data"); 
     request.setRequestHeader("Content-Type", "text/json"); 
     request.send(data_to_send); 
     request.onload = function() { 
      Ti.API.info(this.responseText); 
      bh.ui.profile.createWindow(); 
     }; 
     request.onerror = function(){ 
      alert('Error while posting message'); 
     }; 

は、WCFのコードです:

インタフェース:

[OperationContract] 
     [WebInvoke(Method = "POST", 
         UriTemplate = "/PostMessage/{userid}/{touserid}", 
         BodyStyle = WebMessageBodyStyle.WrappedRequest, 
      ResponseFormat = WebMessageFormat.Json, 
      RequestFormat = WebMessageFormat.Json)] 
     int PostMessage(string userid, string touserid, string message); 

クラス:

public int PostMessage(string userID, string toUserID, string message) 
     { 
      MDBDataContext oMDB = new MDBDataContext(); 
      int returnValue = oMDB.PostMessage(Convert.ToInt32(userID), message, Convert.ToInt32(toUserID)); 

      oMDB.Dispose(); 

      return returnValue; 
     } 

クエリ:この機能を変換する場合t o "GET"は非常にうまく動作します。しかし、 "POST"ではエラーが発生し、エラーを特定できません。 WCFでもtraceListenerを有効にしましたが、エラーはありません。

助けてください。私はこの時点で立ち往生しています。私はiPhoneシミュレータで試しています。

答えて

4

最後に、私のコードで問題が見つかりました。このソリューションはすべてのクライアント側のテクノロジに適用されます。

var data_to_send = '{"userid": "' + bh.userID + '", "touserid": "' + bh.logic.profile.userID + '","message": "' + bh.ui.postMessage.txtPost.value + '"}'; 
var request = Titanium.Network.createHTTPClient(); 
request.onload = function() { 
    //Some code here 
}; 
request.onerror = function(){ 
    //Some code here 
}; 
request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage"); 
request.setRequestHeader("enctype", "multipart/form-data"); 
request.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
request.send(data_to_send); 

修正:

  1. 私が送信されたJSONデータが正しい形式ではありませんでしたが

    はのは、最初の作業コードを見てみましょう。私はそれがローカルのjavascriptで消費されていたはずだったようにjson文字列を作成しました。しかし、私のjsonはWCFによって消費されなければならなかった。だから、そこに到達するまでには、それはjsonのままにすべきです。一重引用符と二重引用符の使用に注意してください。彼らは彼らのようにすべきです。 Asp.netの一重引用符は文字列であって文字列ではないため、これらの文字列を入れ替えることもうまくいかないと思います。

  2. 送信しているヘッダー情報の使用に注目してください。私はそれのいくつかのバリエーションが動作すると思うが、atleast アプリケーション/ json物が必要です。

希望があれば。全体的なポイントは、あなたが考えるものはjavascriptが正しいのはjsonにとって正しいものではないということです。

0

チタンコードを正しい順序でセットする必要があります。マニュアルに従って

リスナー後にする必要がありスニペット

request.open("POST", bh.serverAddress + "MyCareer.svc/PostMessage/"+ bh.userID + "/" + bh.logic.profile.userID);

(などのonload、ONERROR、...)とsend()前。

+0

夜にチェックアウトして投稿を更新します。 – iMatoria

+0

私はそれがどちらの方法でも動作しないことを確認し、見つけました。しかし、ここで注目すべき点の1つは、私のonload関数が呼び出されたため、Titaniumは実際にWCFへのリクエストを成功させることです。私は問題がポストサービスのためにチタンとWCFの間の通信署名にあると思う。 WCFではなく、Asp.Netページで確認してみましょう。 – iMatoria

+0

ありがとうございました。あなたの答えに私の上記コメントがあるので、私は最終的にバグを発見しました。どうもありがとう。 – iMatoria