首页 > 解决方案 > JsonWriter POST 在 Android 中无法工作到 WCF Web 服务

问题描述

我想知道有人有关于如何使用 JsonWriter 将 JSON 数据从 Android 发布到 WCF Web 服务的示例代码吗?

我用 Fiddler 4(带有 POST json 数据的 Composer)测试了我的 WCF,它给了我正确的回报。
但是,当我使用使用 JsonWriter 的 Android 应用程序进行测试时,我没有在 Fiddler 上看到任何操作(我设置 Fiddler 来检查我的 Android Emulator 网络流量,顺便说一下,我正在 Android Emulator 上进行测试。)。

使用相同的 Android 应用程序,我可以使用 JsonReader 向我的 WCF 调用 GET 并获得正确的回复。
它只是用 JsonWriter 调用 POST 在 Fiddler 中没有响应代码或没有操作。

对于 JsonWriter(和 Reader),我指的是 Android developer >> JsonWriter

这是我使用 Emulator GET 和 POST 的测试结果(Get 和 Post)。

JSON_GET

JSON_POST

这是我使用 Fiddler 直接 POST 的测试结果。
首先它给了我结果 307,然后是 200。

提琴手_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 服务,只有 Fiddler 直接 POST 会在我的 WCF 项目中达到断点,而 Android 应用程序没有达到它)。不过,我遵循了来自 Android Developer 网站的确切示例。我谷歌并没有找到任何使用 JsonWriter 和 OutputStreamWriter 的网站(我看到一些使用 StringWriter 的帖子)。
我可以知道我的代码哪里出错了吗?

标签: androidjsonpostlocalhostwcf-rest

解决方案


基于这个 StackOverFlow 帖子WCF 有一个关于 URI 的“事情”,我设法解决了这个问题。

我只需要确保我的 POST Web 服务的 URI 模板以“Slash”结尾。

示例: http: //10.72.137.98/myWebSvc/posvctFun /
而不是http://10.72.137.98/myWebSvc/postFun


推荐阅读