vb.net asmx WebService для принятия JSON в HTTP-POST с помощью Android - PullRequest
3 голосов
/ 18 июля 2011

Я пытаюсь отправить данные на мой сервер (vb.net) с помощью мобильных устройств.Я исследовал несколько замечательных статей на стороне клиента (Android), включая эту статью Encosia и об отправке объекта JSON с Android .

. Я создал образец класса:

Public Class OneEvaluation

   Private strEmail As String
    Public Property email() As String
        Get
            Return strEmail
        End Get
        Set(ByVal value As String)
            strEmail = value
        End Set
    End Property
    Private strPassword As String
    Public Property password() As String
        Get
            Return strPassword
        End Get
        Set(ByVal value As String)
            strPassword = value
        End Set
    End Property
End Class

и я создал свой веб-метод:

Public Class AsmxCodebehind
    Inherits System.Web.Services.WebService

<WebMethod()> _
   Public Function AndroidTest(ByVal JSON As OneEvaluation) As String  '
    Dim strSQLInsertCommand As String

    ' code block

    Return "whatever"
End Function

Он строит (VS2008 sp1) без ошибок.Я не получаю ответ на Android.Если я удалю аргумент «JSON as OneEvaluation», он будет успешно опубликован в браузере и предоставит HTML-возврат;но, как написано выше ... ошибка: System.InvalidOperationException: AndroidTest Web Service method name is not valid. at System.Web.Services.Protocols.HttpServerProtocol.Initialize()

К вашему сведению, мой фрагмент Android выглядит следующим образом:

final String URL = "http://www3.myurl.com/JSON/service.asmx/AndroidTest"

HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();

try{
    HttpPost post = new HttpPost(URL);
    json.put("email", email);
    json.put("password", pwd);
    StringEntity se = new StringEntity( "OneEvaluation: " + json.toString());  
    //   post.setEntity(se);
    post.setHeader("Accept", "application/json");
    post.setHeader("Content-type", "application/json; charset=utf-8");
    // se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8"));

    post.setEntity(new ByteArrayEntity(se.toString().getBytes("UTF8")));
    //   post.setHeader(OneEvaluation, value)
    //   ResponseHandler responseHandler = new BasicResponseHandler();
    response = client.execute(post);
    /* Checking response */
    Log.v("TAG", " JSON onItemClick fired! Position:");

    if(response!=null){
        Log.v("TAG", " Response :" + response.toString());
        //  Toast.makeText(v.getContext(), response, Toast.LENGTH_LONG);
        InputStream in = response.getEntity().getContent(); //Get the data in the entity
    }
}
catch(Exception e){
    e.printStackTrace();
    createDialog("Error", "Cannot Estabilish Connection");
    Log.v("TAG", " Cannot Estabilish Connection");
}

Я не видел полный пример с обеих сторон сервера (кроме тех, кто использует jQuery) и на стороне клиента (особенно Android).Поэтому я надеюсь сохранить чужие выходные!

Я отказался от использования C # на стороне сервера, так как другие мои службы AJAX / JSON (включая те, которые возвращают JSON) находятся в vb (и работают).

Я прошу помощи с ошибкой на стороне сервера ... и любые предложения по очистке Android JSON HTTP_POST.

Заранее большое спасибо!

1 Ответ

2 голосов
/ 19 июля 2011

Уф!Я не смог бы сделать это без Фиддлера и некоторых БОЛЬШИХ сообщений, , как этот ответ от @ Mark-Schultheiss.

Кроме того, будущие путешественники ... будьте осторожны, что правильный формат данных для вашегоОжидается JSON!

{"JSON": {"email":"kiddin","password":"no"}} был единственным способом, которым это было принято.Одиночная квота недопустима ... поэтому вставьте двойную кавычку (\ ") в код и вызовите имя метода (например, JSON), а не класс.

Я не смог бы сделать это без тестирования с использованием веб-страницыиспользуя jQuery. Я рекомендую этот блог ... http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/'> Encosia от @ Dave-Ward. Просто помните, мне пришлось использовать двойные кавычки вместо упомянутой одинарной кавычки.

...