android - 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)。
这是我使用 Fiddler 直接 POST 的测试结果。
首先它给了我结果 307,然后是 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 的帖子)。
我可以知道我的代码哪里出错了吗?
解决方案
基于这个 StackOverFlow 帖子WCF 有一个关于 URI 的“事情”,我设法解决了这个问题。
我只需要确保我的 POST Web 服务的 URI 模板以“Slash”结尾。
示例: http: //10.72.137.98/myWebSvc/posvctFun /
而不是http://10.72.137.98/myWebSvc/postFun
推荐阅读
- ios - 从集合视图控制器调用时集合视图标题中的 UIButton 不起作用,如何解决此问题?
- java - 在本地禁用领事配置
- java - 如何在intellij中纠正java多行中单个语句的缩进
- mysql - Zend Framework 2 Db getColumns
- javascript - Javascript:类的第二个实例覆盖第一个
- python - 子进程管道仅在运行脚本时损坏
- r - 在ggplot2中绘制一个带网格的正方形
- amazon-web-services - 在 aws-amplify 与 Google 联合登录后检索用户的姓名和电子邮件
- scrapy - scrapy.exceptions.NotSupported:不支持的 URL 方案“”:该方案没有可用的处理程序
- email - 将发件人 Outlook 签名添加到使用 Excel 中的宏创建的电子邮件