J2ME调用C# WebService的方法(含参数)

 

经过半个月的努力,终于把了解J2ME调用C# WebService(含参数)的方法,努力了好久,决定和大家分享。在分享之前,要感谢在这个过程中一直帮助我的ωǒs甲骨文和Je m'appelle,是他们的帮助让我掌握了这一方法。

以登陆为例进行分析

登陆代码:

  1. package com.sinic.logic;
  2. import javax.microedition.lcdui.Alert;
  3. import javax.microedition.lcdui.AlertType;
  4. import javax.microedition.lcdui.Command;
  5. import javax.microedition.lcdui.CommandListener;
  6. import javax.microedition.lcdui.Display;
  7. import javax.microedition.lcdui.Displayable;
  8. import javax.microedition.lcdui.Form;
  9. import javax.microedition.lcdui.TextField;
  10. import com.sinic.main.FrmMain;
  11. /** 
  12.  * <p>Title: UserLogin</p> 
  13.  * <p>Description: 个性设置:登陆界面</p> 
  14.  * <p>Copyright: Copyright (c) 2008</p> 
  15.  * <p>Company: </p> 
  16.  * @author 朱久长 
  17.  * @version 1.0 
  18.  * */ 
  19. public class UserLogin extends Form implements CommandListener, Runnable{
  20.     private TextField tfUser = new TextField("请编辑手机号码:"""11, TextField.NUMERIC);
  21.     private TextField tfPass = new TextField("请输入服务密码:"""6, TextField.NUMERIC);
  22.     private Display display = null;
  23.     private FrmMain fm=null;
  24.     private Displayable parent = null;
  25.     private int result=0;
  26.     private Thread t;
  27.     private String user=null;
  28.     private String pass=null;
  29.     private UserMainForm userMain=null;
  30.     private final static Command CMD_BACK = new Command("返回", Command.SCREEN, 1);
  31.     private final static Command CMD_OK = new Command("确定", Command.SCREEN, 1);
  32.         
  33.     public UserLogin(FrmMain d, Displayable p) {
  34.         super("个性设置--用户登陆");
  35.         fm = d;
  36.         this.parent = p;
  37.         append(tfUser);
  38.         append(tfPass);
  39.         addCommand(CMD_OK);
  40.         addCommand(CMD_BACK);
  41.         setCommandListener(this);
  42.     }
  43.     public void commandAction(Command arg0, Displayable arg1) {
  44.         String strUser = tfUser.getString().toString();
  45.         if (arg0 == CMD_BACK) {
  46.             fm.display.setCurrent(parent);
  47.         } else if (arg0 == CMD_OK) {
  48.             if(strUser.length()!=11){
  49.                 Alert a = new Alert("个性设置--用户登陆""手机号码不正确"null, AlertType.INFO);
  50.                 display.setCurrent(a);
  51.             }else{
  52.                 t=new Thread(this);
  53.                 t.start();
  54.             }
  55.         }
  56.     }
  57.     
  58.     public void run(){
  59.         user = tfUser.getString().toString();
  60.         pass = tfPass.getString().toString();
  61.         userMain=new UserMainForm(fm,this,user);
  62.         
  63.         result=new J2meToWS().checkUser(user, pass);
  64.       
  65.         if(result==1){
  66.             fm.display.setCurrent(userMain);
  67.         }else {
  68.             Alert a = new Alert("个性设置--用户登陆""登陆失败"null, AlertType.INFO);
  69.             fm.display.setCurrent(a);
  70.             System.out.println("~~~~登陆失败~~~~ ");
  71.         }
  72.     }
  73. }

J2meToWS类:包含checkUser(user, pass)方法

  1. package com.sinic.logic;
  2. import org.ksoap.SoapObject;
  3. import org.ksoap.transport.HttpTransport;
  4. //import org.ksoap2.SoapEnvelope;
  5. //import org.ksoap2.serialization.MarshalBase64;
  6. //import org.ksoap2.serialization.SoapSerializationEnvelope;
  7. /** 
  8.  * <p>Title: J2meToWS</p> 
  9.  * <p>Description: J2me To Web Service</p> 
  10.  * <p>Copyright: Copyright (c) 2008</p> 
  11.  * <p>Company: </p> 
  12.  * @author 朱久长 
  13.  * @version 1.0 
  14.  * */  
  15. public class J2meToWS {    
  16.     public J2meToWS() {  
  17.         
  18.     }  
  19.     public int checkUser(String tel,String pwd) {    
  20.         int  result = 0
  21.         try {  
  22.             SoapObject rpc = new SoapObject("http://tempuri.org/""Login");
  23.             //tel、pwd是方法Login(string tel,string pwd)的两个参数,参数名和个数保持相同
  24.             rpc.addProperty("tel", tel);  
  25.             rpc.addProperty("pwd", pwd);
  26.             HttpTransport ht = new HttpTransport("http://localhost/SMSCALLWebService/AppService.asmx"
  27.                                                               "http://tempuri.org/Login"); 
  28.             ht.debug=true;
  29.             result =Integer.parseInt(ht.call(rpc).toString()); 
  30.         }catch (Exception e) {      
  31.             e.printStackTrace();    
  32.         }    
  33.         return result;  
  34.     }
  35. }

所调用的WebService文件AppService.asmx含有Login(string tel,string pwd)方法。特别注意,必须加上[SoapRpcService(RoutingStyle = SoapServiceRoutingStyle.SoapAction)]这句声明方了。

  1. using System;
  2. using System.Web;
  3. using System.Collections;
  4. using System.Web.Services;
  5. using System.Web.Services.Protocols;
  6. using System.Data;
  7. using System.Text;
  8. /// <summary>
  9. /// 系统服务
  10. /// </summary>
  11. [WebService(Namespace = "http://tempuri.org/")]
  12. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  13. [SoapRpcService(RoutingStyle = SoapServiceRoutingStyle.SoapAction)]
  14. public class AppService : System.Web.Services.WebService
  15. {
  16.     public AppService()
  17.     {
  18.         //如果使用设计的组件,请取消注释以下行 
  19.         //InitializeComponent(); 
  20.     }
  21.     [WebMethod(Description="系统登录  1:验证通过,2:退订用户,4:密码错误,8:无此用户")]
  22.     public int Login(string tel,string pwd)
  23.     {
  24.         string sql = "SELECT STAT,PWD_NO FROM NO_INFO WHERE NO='" + tel + "'";
  25.         DataTable dt = new DataAccess().GetDataTable(sql);
  26.         if (dt != null && dt.Rows.Count == 1)
  27.         {
  28.             string passwordDB = dt.Rows[0]["PWD_NO"].ToString();
  29.             if (string.Equals(pwd, passwordDB))
  30.             {
  31.                 int statDB = Convert.ToInt32(dt.Rows[0]["STAT"]);
  32.                 return statDB == 1 ? 1 : 2;
  33.             }
  34.             else
  35.             {
  36.                 return 4;
  37.             }
  38.         }
  39.         else
  40.         {
  41.             return 8;
  42.         }
  43.     }
  44. }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值