【问题标题】:vb.net asmx WebService to accept JSON in HTTP-POST using Androidvb.net asmx WebService 使用 Android 在 HTTP-POST 中接受 JSON
【发布时间】:2011-07-18 01:59:34
【问题描述】:

我正在尝试使用移动设备将数据发布到我的服务器 (vb.net)。 我研究了几篇关于客户端 (Android) 的精彩文章,包括 Encosia articlesending 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

我已经创建了我的网络方法:

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 sn-p 如下:

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 的任何建议。

提前非常感谢!

【问题讨论】:

  • 我仍在努力让它在 IIS 中启动。我使用 Fiddler 来确认我在 POST 中发送 JSON。 Fiddler 将我的帖子显示为: POST <a href="/default/index/tourl?u=aHR0cDovL3d3dzMubXl3ZWIuY29tL0pTT04vc3dVcGRhdGUuYXNteC9TYXZlUHJvY2VkdXJlTGlzdA%3D%3D" rel="nofollow" target="_blank">www3.myweb.com/JSON/swUpdate.asmx/SaveProcedureList</a> HTTP/1.1 Accept: application/json Content-type: application/json; charset=utf-8 内容长度:44 主机:www3.tidewatertechnology.com 连接:Keep-Alive 用户代理:Apache-HttpClient/UNAVAILABLE (java 1.4) 期望:100-继续 {"OneEvaluation": {"email": "kiddin","password":"no"}}

标签: android json http-post webmethod


【解决方案1】:

哇!如果没有 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。请记住,我必须使用双引号而不是提到的单引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多