JsonWriter POST 在 Android 中无法工作到 WCF Web 服务
JsonWriter POST not working in Android to WCF web service
我想知道有人有关于如何使用 JsonWriter 将 post JSON 数据从 Android 发送到 WCF Web 服务的示例代码吗?
我用 Fiddler 4(具有 POST json 数据的 Composer)测试了我的 WCF,它给了我正确的 return。
但是,当我使用使用 JsonWriter 的 Android 应用程序进行测试时,我没有看到 Fiddler 有任何动作(我设置了 Fiddler 来检查我的 Android 仿真器网络流量,顺便说一句,我在 Android 模拟器上测试。)。
使用相同的 Android 应用程序,我可以使用 JsonReader 调用 GET 到我的 WCF 并获得正确的回复。
它只是用 JsonWriter 调用 POST 没有响应代码,也没有在 Fiddler 中执行任何操作。
对于 JsonWriter(和 Reader),我指的是 Android developer >> JsonWriter
这是我使用模拟器 GET 和 POST 的测试结果(Get 和 Post)。
这是我直接使用 Fiddler POST.
的测试结果
首先它给了我结果 307,然后是 200。
下面是我如何使用 JsonWriter 来 post(这个块来自 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 附加到我的本地主机服务,只有 Fiddler 直接 POST 会在我的 WCF 项目中达到断点,而 Android 应用程序未访问它)。不过,我遵循 Android 开发者网站上的确切示例。我 google 并没有找到任何关于将 JsonWriter 与 OutputStreamWriter 结合使用的站点(我看到一些 post 使用 StringWriter)。
我可以知道我的代码哪里错了吗?
基于这个 Whosebug post WCF has a 'Thing' about URI,我设法解决了这个问题。
我只需要确保我的 POST Web 服务的 URI 模板以 "Slash" 结尾。
示例:http://10.72.137.98/myWebSvc/posvctFun/
而不是 http://10.72.137.98/myWebSvc/postFun
我想知道有人有关于如何使用 JsonWriter 将 post JSON 数据从 Android 发送到 WCF Web 服务的示例代码吗?
我用 Fiddler 4(具有 POST json 数据的 Composer)测试了我的 WCF,它给了我正确的 return。
但是,当我使用使用 JsonWriter 的 Android 应用程序进行测试时,我没有看到 Fiddler 有任何动作(我设置了 Fiddler 来检查我的 Android 仿真器网络流量,顺便说一句,我在 Android 模拟器上测试。)。
使用相同的 Android 应用程序,我可以使用 JsonReader 调用 GET 到我的 WCF 并获得正确的回复。
它只是用 JsonWriter 调用 POST 没有响应代码,也没有在 Fiddler 中执行任何操作。
对于 JsonWriter(和 Reader),我指的是 Android developer >> JsonWriter
这是我使用模拟器 GET 和 POST 的测试结果(Get 和 Post)。
这是我直接使用 Fiddler POST.
下面是我如何使用 JsonWriter 来 post(这个块来自 AsyncTask)。 我尝试了但仍然无法弄清楚为什么 JsonWriter 没有触发我的 WCF(我将我的 WCF 附加到我的本地主机服务,只有 Fiddler 直接 POST 会在我的 WCF 项目中达到断点,而 Android 应用程序未访问它)。不过,我遵循 Android 开发者网站上的确切示例。我 google 并没有找到任何关于将 JsonWriter 与 OutputStreamWriter 结合使用的站点(我看到一些 post 使用 StringWriter)。
的测试结果
首先它给了我结果 307,然后是 200。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.
}
我可以知道我的代码哪里错了吗?
基于这个 Whosebug post WCF has a 'Thing' about URI,我设法解决了这个问题。
我只需要确保我的 POST Web 服务的 URI 模板以 "Slash" 结尾。
示例:http://10.72.137.98/myWebSvc/posvctFun/
而不是 http://10.72.137.98/myWebSvc/postFun