• asp.net hessian + android hessdroid



    做android开发时你还在为gson,json而人肉序列化与反序列化吗,上传文件时你还在使用UrlConnection或者HttpClient吗?
    下面提供了asp.net 服务端与 android 客户端通过hessdroid (hessian 的android版) 通信解决方案,从此你不用再为上面的问题发愁了
    中小应用,使用.net 的EF(数据库优先)或linq,那是相当的方便,做个管理页面也只要拖拖控件就好了(不拖都对不起自己尤其是自己从头整到尾的项目), 当然你需要使用EmitMapper一类的东西将dto映射到EF实体类上。

    服务端定义实体类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace cn.fstudio.hessian.dto
    {
        public class ResponseBase<T>
        {
            private int code;
            private string msg;
            private T model;
    
            public int Code
            {
                get { return code; }
                set { code = value; }
            }
            public string Msg
            {
                get { return msg; }
                set { msg = value; }
            }
            public T Model
            {
                get { return model; }
                set { model = value; }
    
            }
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using cn.fstudio.hessian.dto;
    
    namespace aa.model
    {
        
        public class UserListResponse:ResponseBase<List<UserInfo>>
        {
            private DateTime? addTime;
    
            public DateTime? AddTime
            {
                get { return addTime; }
                set { addTime = value; }
            }
            private byte[] fileDate;
    
            public byte[] FileDate
            {
                get { return fileDate; }
                set { fileDate = value; }
            }
            private bool? isAdmin;
    
            public bool? IsAdmin
            {
                get { return isAdmin; }
                set { isAdmin = value; }
            }
    
     
    
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace aa.model
    {
        public class UserInfo
        {
            private string userNo ;
            public String UserNo
            {
                get
                {
                    return userNo;
                }
                set
                {
                    userNo = value;
                }
            }
            private string username;
    
            public string Username
            {
                get { return username; }
                set { username = value; }
            }
            private string password;
    
            public string Password
            {
                get { return password; }
                set { password = value; }
            }
            private string mobile;
    
            public string Mobile
            {
                get { return mobile; }
                set { mobile = value; }
            }
            private string userType;
    
            public string UserType
            {
                get { return userType; }
                set { userType = value; }
            }
            private int recId;
    
            public int RecId
            {
                get { return recId; }
                set { recId = value; }
            }
            private int userLevel;
    
            public int UserLevel
            {
                get { return userLevel; }
                set { userLevel = value; }
            }
    
    
    
        }
    }
    View Code

    实体类定义不要写成public String Field{get;set;} //因为只动生成的字段名称可能是FieldName_<>K,hessian反射时会出错

    服务端接口定义与实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using aa.model;
    namespace aa.service
    {
        public interface UserService
        {
            UserListResponse getUserlist(UserListResponse res);
            string hello(string name);
             List<UserInfo> getUsers();
             AInfo getAInfo();
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using aa.service;
    using aa.model;
    using hessiancsharp.server;
    namespace AA.ServiceImpl
    {
        public class UserServiceImpl:CHessianHandler, UserService
        {
            #region UserService 成员
    
            public UserListResponse getUserlist(UserListResponse res)
            {
                var response = res;
    
                UserInfo u = new UserInfo();
                u.Username = "张三";
                u.UserLevel = 88;
                response.AddTime = DateTime.Now;
    
    
                response.Model.Add(u);
    
                response.Code = 1;
                response.Msg = "终于可以了吗吗吗吗?";
    
                return response;
            }
    
            #endregion
    
            #region UserService 成员
    
    
            public string hello(string name)
            {
                return DateTime.Now + "->" + name;
            }
            public List<UserInfo> getUsers()
            {
                UserInfo u = new UserInfo();
                u.Username = "张三";
                u.UserLevel = 88;
                return new List<UserInfo>() { u, u, u, u, u, u, u };
            }
    
            #endregion
    
            #region UserService 成员
    
    
            public AInfo getAInfo()
            {
                return new AInfo() { id = 18,name="还是中文" };
            }
    
            #endregion
        }
    }
    View Code

    注意:mvc项目需要在routeConfig中加上 routes.IgnoreRoute("{hessian}.hessian/{*pathInfo}");
    web.config中添加
       <httpHandlers>
          <add verb="*" path="UserService.hessian" type="AA.ServiceImpl.UserServiceImpl, AA.ServiceImpl" />
        </httpHandlers>

     客户端实体类:

    package cn.fstudio.hessian.dto;
    
    import java.io.Serializable;
    
    public class ResponseBase<T> implements Serializable{
    
        private static final long serialVersionUID = 1L;
        public int getCode() {
            return code;
        }
        public void setCode(int code) {
            this.code = code;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
        public T getModel() {
            return model;
        }
        public void setModel(T model) {
            this.model = model;
        }
        private int code;
        private String msg;
        private T model;
    }
    View Code
    package aa.model;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    import aa.model.UserInfo;
    
    import cn.fstudio.hessian.dto.ResponseBase;
    
    public class UserListResponse extends ResponseBase<List<UserInfo>> implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private Date addTime;
        private byte[] fileDate;
        private Boolean isAdmin;
        
        
        public Date getAddTime() {
            return addTime;
        }
        public void setAddTime(Date addTime) {
            this.addTime = addTime;
        }
        public byte[] getFileDate() {
            return fileDate;
        }
        public void setFileDate(byte[] fileDate) {
            this.fileDate = fileDate;
        }
        public Boolean getIsAdmin() {
            return isAdmin;
        }
        public void setIsAdmin(Boolean isAdmin) {
            this.isAdmin = isAdmin;
            
        }
    
        
    }
    View Code
    package aa.model;
    
    import java.io.Serializable;
    
    public class UserInfo implements Serializable{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        public String getUserNo() {
            return userNo;
        }
        public void setUserNo(String userNo) {
            this.userNo = userNo;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        public String getUserType() {
            return userType;
        }
        public void setUserType(String userType) {
            this.userType = userType;
        }
        public int getRecId() {
            return recId;
        }
        public void setRecId(int recId) {
            this.recId = recId;
        }
        public int getUserLevel() {
            return userLevel;
        }
        public void setUserLevel(int userLevel) {
            this.userLevel = userLevel;
        }
        public static long getSerialversionuid() {
            return serialVersionUID;
        }
        private String userNo;
        private String username;
        private String password;
        private String mobile;
        private String userType;
        private int recId;
        private int userLevel;
        
    
    
    
    }
    View Code

    客户端接口定义

    package aa.service;
    
    import java.util.List;
    
    import aa.model.AInfo;
    import aa.model.UserInfo;
    import aa.model.UserListResponse;
    
    public interface UserService {
         public UserListResponse getUserlist(UserListResponse req);
         public String hello(String name);
         List<UserInfo> getUsers();
         AInfo getAInfo();
    }
    View Code
            String url = "http://122.xxx.xxx.x:7086/UserService.hessian";
                    HessianProxyFactory factory = new HessianProxyFactory();
                    try {
                        
                        
                        UserListResponse req=new UserListResponse();
                        req.setAddTime(new Date());
                        req.setCode(11);
                        req.setFileDate(new byte[]{3,2,1});
                        req.setIsAdmin(true);
                        req.setMsg("这里我传了一些中文上去");
                        
                        UserInfo u=new UserInfo();
        
                        u.setUsername("一个鸟人");
                        u.setMobile("13616761237");
                        u.setUserLevel(18);
                        
                        List<UserInfo> list=new ArrayList<UserInfo>();
                        for(int i=0;i<1000;i++)
                        {
                           list.add(u);    
                        }
                        
                        req.setModel(list);
                        
                        
                        factory.setDebug(true);
                        factory.setReadTimeout(5000 * 100);
                        UserService basic = (UserService)factory.create(UserService.class, url,getClassLoader());
                        String response=basic.hello("xxx");
                        UserListResponse response2=basic.getUserlist(req);
                        //Toast.makeText(FullscreenActivity.this, "调用结果:"+ response2.getCode(), Toast.LENGTH_LONG).show();
                        String msg=response2.getModel().get(response2.getModel().size() -1).getUsername() + "," + response2.getModel().size();
                        new AlertDialog.Builder(FullscreenActivity.this).setTitle(response2.getFileDate().length + "").setMessage(msg).show();
                    } catch (Exception e) {
                        new AlertDialog.Builder(FullscreenActivity.this).setTitle("Error").setMessage(e.getMessage()).show();
                    }
    View Code

    程序参考华位网盘[软件任务与测试]

  • 相关阅读:
    预搜索,不匹配;反向预搜索,不匹配
    反向引用 /1, /2...
    贪婪与非贪婪模式
    其他一些代表抽象意义的特殊符号
    修饰匹配次数的特殊符号
    自定义能够匹配 ' 多种字符' 的表达式
    能够与 ' 多种字符' 匹配的表达式
    6)添加带有颜色的那个画板
    5)添加快捷键
    4)记住我的图形
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3275281.html
Copyright © 2020-2023  润新知