将帖子数据发送到Titanium中的WCF

时间:2011-07-02 16:28:50

标签: wcf titanium

以下是钛的代码:

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;
        }

查询:如果我将此功能转换为“GET”,那么它的工作效果非常好。但是,使用“POST”我得到错误,我无法弄清楚错误。我也为WCF启用了traceListener,但没有错误。

请帮忙。我被困在这一点上。我正在尝试使用iPhone模拟器。

2 个答案:

答案 0 :(得分: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数据格式不正确。我创建了一个json字符串,因为它本应在本地javascript中使用。但是,我的json必须由WCF使用。因此,它到达那里时应该保持json。请注意使用单引号和双引号。他们应该像他们一样。我认为交换它们也应该不起作用,因为Asp.net中的单引号表示字符而不是字符串。
  2. 请注意我正在发送的标头信息的使用。我认为它的一些变化应该有效,但至少需要 application / json
  3. 希望有所帮助。整点是你认为javascript的正确性对于json来说是不正确的。

答案 1 :(得分:0)

您需要按照正确的顺序设置钛代码。

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

根据文档,该片段需要在听众(onload,onerror等等)之后和send()之前。