用android调用后调用400错误

时间:2014-01-07 09:53:42

标签: java android web-services post

我试图用POST方法从Android应用程序调用WS方法。 我做了什么:

String urlServer = GlobalSession.IP + "insert_reportByte";
            Log.d("[Report]", "url address: " + urlServer);
            URL url = new URL(urlServer);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();

            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setUseCaches(false);

            connection.setRequestMethod("POST");

            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("Content-Type",
                    "multipart/form-data");

            DataOutputStream outputStream = new DataOutputStream(
                    connection.getOutputStream());

            outputStream.write(outputByteArray, 0, outputByteArray.length);
            int serverResponseCode = connection.getResponseCode();
            String serverResponseMessage = connection.getResponseMessage();
            Log.d("ServerCode", "" + serverResponseCode);
            Log.d("serverResponseMessage", "" + serverResponseMessage);
            outputStream.flush();
            outputStream.close();

        } catch (Exception ex) {
            // ex.printStackTrace();
            Log.e("[Report] --- /!\\ Error: ", ex.getMessage());
        }
        return result;

所以我应该向服务发送一个字节数组。但我有400错误响应。我的问题是:如何获得这样一个问题的细节?因为我在服务器的日志中找不到任何东西,如果我没有详细信息就很难调试......

WS(在ASP.NET中)以这样的方式定义:

[OperationContract]
    [WebInvoke(Method = "POST",
        UriTemplate = "insert_reportByte",
        BodyStyle = WebMessageBodyStyle.Bare)]
    void insert_reportByte(byte[] image);

被调用的方法如下

public void insert_reportByte(byte[] image)
    {
        MyEntities entities = new MyEntities();
        String base64stringimage = System.Convert.ToBase64String(image,0,image.Length);

        entities.insert_report("admin", "0614141.107346.2001", "test", base64stringimage, "test");

    }

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该更改服务器uploadReadAheadSize文件中的maxReceivedMessageSizeapplicationHost.config参数。

这里有一个讨论它的线程

  

http://forums.iis.net/t/1169257.aspx?Request+Entity+Too+large+413+error+

此链接也可能有用,因为它解释了为什么您应该更改uploadReadAheadSizemaxReceivedMessageSize参数以更好地处理文件上传。

  

http://www.codeproject.com/Articles/521725/413-Request-Entity-Too-Large

<强>更新

尝试将此库用于http调用。您似乎向服务器发送了错误的请求。我不认为这与ws所期望的参数有关,而是由android应用程序发送的http标题。

  

https://github.com/loopj/android-async-http

希望它有所帮助。 :)