我试图用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");
}
我做错了什么?
谢谢!
答案 0 :(得分:0)
您应该更改服务器uploadReadAheadSize
文件中的maxReceivedMessageSize
和applicationHost.config
参数。
这里有一个讨论它的线程
http://forums.iis.net/t/1169257.aspx?Request+Entity+Too+large+413+error+
此链接也可能有用,因为它解释了为什么您应该更改uploadReadAheadSize
和maxReceivedMessageSize
参数以更好地处理文件上传。
http://www.codeproject.com/Articles/521725/413-Request-Entity-Too-Large
<强>更新强>
尝试将此库用于http调用。您似乎向服务器发送了错误的请求。我不认为这与ws所期望的参数有关,而是由android应用程序发送的http标题。
希望它有所帮助。 :)