JsonWriter POST не работает в Android для веб-службы WCF

Я хотел бы знать, что у кого-нибудь есть образец кода о том, как использовать 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 и Post) с эмулятором GET и POST.

JsonWriter POST не работает в Android для веб-службы WCF

JsonWriter POST не работает в Android для веб-службы WCF

Вот мои результаты теста с Fiddler direct POST.
Сначала он дал мне Результат 307, затем следовал 200.

JsonWriter POST не работает в Android для веб-службы WCF

JsonWriter POST не работает в Android для веб-службы WCF

А вот как я использую 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. Я погуглил и не нашел ни одного сайта об использовании JsonWriter с OutputStreamWriter (я видел несколько сообщений с использованием StringWriter).
Могу ли я узнать, где ошибся мой код?

После нескольких недель борьбы я узнал, что веб-служба WCF RSETful очень чувствительна к "/" в URITemplate. После изменения моего веб-сервиса вышеуказанный код больше не работает.

scsfdev 26.09.2018 10:28
0
1
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме