Android调用后台服务c# Webservice(源码)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/generallizhong/article/details/70224494

项目中要使用Android调用C#写的WebService,VS2012中写一个测试后台服务,另外soap这个j包是必须要的,还有一些额外的信息比如soap的版本号这里版本号在源码中已附加

1、先来一个Webservice测试简单用例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace testAndroidCall
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
         [WebMethod]
        public string EchoMessage(string msg)
        {
            return msg;
        }
    }
}
这里需要将 ksoap2-android-assembly-2.4-jar-with-dependencies.jar 包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。

2、Android 部分来了

(1) 在AdroidManifest.xml中加入权限,<manifest>节点里面加入下面这句话

<!-- 访问网络的权限 -->
 <uses-permission android:name="android.permission.INTERNET" />
(2)按钮效果
private void initBtn() {
        View btnHelloWorld = this.findViewById(R.id.btnHelloWorld);
        btnHelloWorld.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Map<String, String> values = new HashMap<String, String>();
                values.put("msg", "这是Android手机发出的信息");
                Request(METHOD_HELLO_WORLD);
            }
        });
        
        View btnEchoMessage = this.findViewById(R.id.btnEchoMessage);
        btnEchoMessage.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Map<String, String> values = new HashMap<String, String>();
                values.put("msg", "这是Android手机发出的信息");
                Request(METHOD_ECHO_MESSAGE,values);
            }
        });
    }


 
  
 

在这个方法中,主要应用了AsyncTask来处理WebService的调用,因为调用WebService是网络操作,可能会比较耗时,在Android3.0以上,已经不允许在UI线程直接进行网络操作,另外,AsyncTask还可以直接更新UI上的控件。

/**
     * 执行异步任务
     * 
     * @param params
     *            方法名+参数列表(哈希表形式)
     */
    public void Request(Object... params) {
        new AsyncTask<Object, Object, String>() {

            @Override
            protected String doInBackground(Object... params) {
                if (params != null && params.length == 2) {
                    return CallWebService((String) params[0],
                            (Map<String, String>) params[1]);
                } else if (params != null && params.length == 1) {
                    return CallWebService((String) params[0], null);
                } else {
                    return null;
                }
            }

            protected void onPostExecute(String result) {
                if (result != null) {
                    tvMessage.setText("服务器回复的信息 : " + result);
                }
            };

        }.execute(params);
    }
Android端源代码: 点击下载

Webservice端源代码:点击下载




猜你喜欢

转载自blog.csdn.net/generallizhong/article/details/70224494