отправка почтовых данных в WCF в Titanium - PullRequest
0 голосов
/ 02 июля 2011

Ниже приведен код для титана:

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, но там нет ошибок.

Пожалуйста, помогите. Я застрял в этой точке. Я пытаюсь с iPhone симулятор.

Ответы [ 2 ]

4 голосов
/ 09 июля 2011

Наконец-то я нашел проблему в своем коде.И это решение применимо ко всем технологиям на стороне клиента.

Давайте сначала посмотрим на рабочий код:

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.Таким образом, к тому времени, как он туда доберется, он должен остаться в числе.Обратите внимание на использование одинарных и двойных кавычек.Они должны быть такими, какие они есть.Я думаю, что их обмен также не должен работать, потому что одинарные кавычки в Asp.net означают символ, а не строку.
  2. Обратите внимание на использование информации заголовка, которую я отправляю.Я думаю, что некоторые изменения в этом будут работать, но требуется, по крайней мере, application / json .

Надеюсь, это поможет.Все дело в том, что то, что вы считаете правильным для javascript, не является правильным для json.

0 голосов
/ 04 июля 2011

Вы должны установить свой титановый код в правильном порядке.

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

Этот фрагмент должен быть после слушателей (onload, onerror и т. Д.) И перед send() согласно документации.

...