JSONWriter POST не работает в веб-сервисе Android to WCF - PullRequest
0 голосов
/ 29 августа 2018

Хотелось бы узнать, у кого-нибудь есть пример кода о том, как использовать JsonWriter для публикации данных JSON в веб-сервис WCF с Android?

Я протестировал свой WCF с помощью Fiddler 4 (Composer с данными POST json), и он дал мне верный результат.
Однако, когда я тестировал свое приложение для Android, которое использует JsonWriter, я не увидел никаких действий на Fiddler (я настроил Fiddler для проверки сетевого трафика моего эмулятора Android, кстати, я тестирую на эмуляторе Android.).

С помощью того же приложения для Android я могу вызвать GET с помощью JsonReader для моего WCF и получить правильный ответ.
Просто вызов POST с JsonWriter не получил ни кода ответа, ни действия в Fiddler.

Что касается JsonWriter (и Reader), я обращаюсь к разработчику Android >> JsonWriter

Вот мои результаты тестов (Get and Post) с эмулятором GET и POST.

JSON_GET

JSON_POST

Вот мои результаты теста с FOST FDDLER.
Сначала это дало мне результат 307, а затем 200.

Fiddler_307

Fiddler_200

И вот как я использую JsonWriter для публикации (этот блок был из AsyncTask).

try
{
    Log.d("TEST_JSON", "URL: " + params[0]);
    URL url = new URL(params[0]);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Accept","application/json");
    conn.setRequestProperty("Content-Type","application/json");

    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setUseCaches(false);
    conn.setAllowUserInteraction(false);

    // conn.connect();

    OutputStream out = conn.getOutputStream();
    JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));

    try
    {
        writer.setIndent("  ");

        if(params[1].trim() == "ARRAY")
        {
            // Write array to WCF.
        }
        else if(params[1].trim() == "OBJ")
        {
            // Write object to WCF. <<== I am testing with one object.
            writer.beginObject();

            writer.name("ShipNo").value("SI10101");
            writer.name("DoNo").value("DO230401");
            writer.name("PartNo").value("102931-1201");
            writer.name("Qty").value(1);
            writer.name("ShipIn").value(1);

            writer.endObject();
        }
    }
    finally
    {
        writer.close();
        out.close();
    }


    // If I enable below blocks, I will see 307 response code in Fiddler.
    /*
    conn.connect();

    int responseCode = conn.getResponseCode();
    Log.d("TEST_JSON", "Code: " + String.valueOf(responseCode));
    */

    Log.d("TEST_JSON", "Finish sending JSON.");

    conn.disconnect();
}
catch (IOException e)
{
    Log.e("TEST_JSON",e.getMessage());      // <<-- No error from this try catch block.
}

Я пытался и до сих пор не могу понять, почему JsonWriter не сработал на моем WCF (я прикрепил свой WCF к моей службе localhost, только прямой POST Fiddler достигнет точки останова в моем проекте WCF, в то время как приложение Android не дотянулось до Это). Я следую точному примеру с сайта Android Developer, хотя. Я Google и не нашел ни одного сайта по использованию JsonWriter с OutputStreamWriter (я видел некоторые сообщения, используя StringWriter).
Могу ли я узнать, где мой код неверен?

1 Ответ

0 голосов
/ 26 сентября 2018

Основываясь на этом сообщении StackOverFlow У WCF есть «вещь» о URI , мне удалось решить эту проблему.

Все, что мне нужно, это убедиться, что мой веб-сервис POST имеет URI-шаблон, оканчивающийся на «Слэш».

Пример: http://10.72.137.98/myWebSvc/posvctFun/
Вместо http://10.72.137.98/myWebSvc/postFun

...