我正在尝试使用移动设备将数据发布到我的服务器(vb.net)。 我在客户端(Android)上研究过几篇很棒的文章,包括Encosia article和sending JSON object with Android。
我创建了一个示例类:
Public Class OneEvaluation
Private strEmail As String
Public Property email() As String
Get
Return strEmail
End Get
Set(ByVal value As String)
strEmail = value
End Set
End Property
Private strPassword As String
Public Property password() As String
Get
Return strPassword
End Get
Set(ByVal value As String)
strPassword = value
End Set
End Property
End Class
我已经创建了我的webmethod:
Public Class AsmxCodebehind
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function AndroidTest(ByVal JSON As OneEvaluation) As String '
Dim strSQLInsertCommand As String
' code block
Return "whatever"
End Function
它构建(VS2008 sp1)没有错误。我对android没有任何回应。
如果我删除参数'JSON as OneEvaluation',它将成功发布在浏览器中并提供HTML返回;但如上面编码...错误是:
System.InvalidOperationException: AndroidTest Web Service method name is not valid.
at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
仅供参考,我的Android代码段如下:
final String URL = "http://www3.myurl.com/JSON/service.asmx/AndroidTest"
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();
try{
HttpPost post = new HttpPost(URL);
json.put("email", email);
json.put("password", pwd);
StringEntity se = new StringEntity( "OneEvaluation: " + json.toString());
// post.setEntity(se);
post.setHeader("Accept", "application/json");
post.setHeader("Content-type", "application/json; charset=utf-8");
// se.setContentEncoding((Header) new BasicHeader(HTTP.CONTENT_TYPE, "application/json; charset=utf-8"));
post.setEntity(new ByteArrayEntity(se.toString().getBytes("UTF8")));
// post.setHeader(OneEvaluation, value)
// ResponseHandler responseHandler = new BasicResponseHandler();
response = client.execute(post);
/* Checking response */
Log.v("TAG", " JSON onItemClick fired! Position:");
if(response!=null){
Log.v("TAG", " Response :" + response.toString());
// Toast.makeText(v.getContext(), response, Toast.LENGTH_LONG);
InputStream in = response.getEntity().getContent(); //Get the data in the entity
}
}
catch(Exception e){
e.printStackTrace();
createDialog("Error", "Cannot Estabilish Connection");
Log.v("TAG", " Cannot Estabilish Connection");
}
我还没有看到服务器端(除了那些使用jQuery)和客户端(尤其是Android)的完整示例。所以我希望拯救别人的周末!
我拒绝在服务器端使用C#,因为我的其他AJAX / JSON服务(包括那些返回JSON的服务)都在vb中(并且正在工作)。
我正在寻求有关服务器端错误的帮助......以及任何清理Android JSON HTTP_POST的建议。
非常感谢提前!
答案 0 :(得分:2)
呼!如果没有Fiddler和来自@ Mark-Schultheiss的一些伟大帖子 like this answer,我无法做到。
此外,未来的旅行者......请注意,您的JSON的数据格式是正确的!
{"JSON": {"email":"kiddin","password":"no"}}
是被接受的唯一方式。单引号是不可接受的...所以将双引号(\“)转义为代码并调用方法名(即JSON) - 而不是类。
如果没有使用jQuery使用网页进行测试,我无法做到这一点。我推荐这个博客...... http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/'>来自@ Dave-Ward的Encosia。请记住,我必须使用双引号而不是提到的单引号。