摘要: 热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力。由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI。它有完整的demo和强大AIP手册,使我在开发过程中得心应手。以下是这篇博文Demo程序的演示效果:  解决方案如图1所示图1  Domain:领域模型  Dao:持久层  Service:服务层  ...阅读全文
posted @ 2011-08-19 01:53 刘冬.NET 阅读(12865) 评论(119) 编辑
摘要: 最近由于工作忙的原因,博客更新的比较慢,在此给园子里的朋友说声抱歉。于是,我利用周末的时间写了一份Spring.NET架构的综合应用,希望这样的实用型架构能受到大家的欢迎。  一、概括  此Demo使用的开发工具是:VS2010,数据库任意,Silvelright版本是4.0。Demo分为三层(Tier),数据库,服务器端,客户端。其中,服务器端又分为三层(Layer),持久层,服务层,门面层。WCF以Windows服务作为宿主,客户端使用Silverlight运行浏览器之外。图1  图1是解决方案中包含的项目。其中,Server文件夹下是服务器端的代码,Host文件夹下是服务器端的Windo阅读全文
posted @ 2010-10-16 14:03 刘冬.NET 阅读(9722) 评论(53) 编辑
摘要: 目录  前言  Spring.NET学习笔记——前言    第一阶段:控制反转与依赖注入IoC&DI  Spring.NET学习笔记1——控制反转(基础篇) Level 200  Spring.NET学习笔记2——环境搭建(基础篇) Level 200  Spring.NET学习笔记3——实现一...阅读全文
posted @ 2009-11-20 12:36 刘冬.NET 阅读(21189) 评论(30) 编辑
摘要: 今晚看了几篇项目应用的博客感受很深,晚上怎么都睡不着觉。于是乎,下面的博客诞生了 ^-^。  我在想是不是要把我熟悉的Spring.NET框架与别的框架或技术结合起来。由于心血来潮,斗胆在园子里这么多大牛的面前班门弄斧了。长话短说,下面是我项目中用到的技术(图1):1.JQuery的FlexiGrid插件2.ASP.NET MVC3.NVelocity目前没有与MVC结合,只是用来简单的替换模板4...阅读全文
posted @ 2009-11-10 07:28 刘冬.NET 阅读(14280) 评论(49) 编辑
摘要: 热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力。由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI。它有完整的demo和强大AIP手册,使我在开发过程中得心应手。以下是这篇博文Demo程序的演示效果:  解决方案如图1所示图1  Domain:领域模型  Dao:持久层  Service:服务层  ...阅读全文
posted @ 2011-08-19 01:53 刘冬.NET 阅读(12865) 评论(119) 编辑
摘要: 内容摘要 前言 设计思路 ASP.NET服务器端 Android客户端 运行结果 上篇《Android与IIS身份验证——基本验证》实现了Android客户端与IIS的简单验证。而这种验证方式虽然使用起来比较简单,但是也有很多缺点。如,安全性较差,账号密码设置不灵活。让我们回顾一下ASP.NET的身份验证方式:Windows、Form和Passport。这三种验证方式中,Form身份验证方式最经常使用,因为它有很多优越性,其优点我就不一一介绍了。那么,怎样实现Android客户端与IIS的Form身份验证呢?我整理了一下,需要以下几个步骤: 一、设计思路 Android客户端访问IIS服务器时阅读全文
posted @ 2011-08-19 00:16 刘冬.NET 阅读(1594) 评论(4) 编辑

 

 内容摘要

  前言

  1.服务器端

  2.Android客户端

  3.IIS部署

  4.运行效果

 

  在Android移动项目开发中,访问服务器时,为了简洁方便,我们经常使用http协议来传递JSON格式的数据。然而有些项目需要有一定的安全性,如使用Android客户端登陆到MIS系统。虽然我们是通过Android手机客户端的登陆Activity中登陆到系统的,但是略懂电脑的黑客是能够跳过登陆Activity,从而直接进入系统的。这样,会造成一些由于系统的不安全所带来的麻烦。建立一种防止黑客强行登录的身份验证模式尤为重要。此时,系统的身份验证成为阻挡黑客登陆的一道屏障。那么,怎样实现一个身份验证呢?让我们以IIS为宿主,一步一步的实现身份验证吧。

 

  一、ASP.NET服务器端

  首先,我们使用VS2010创建一个web项目(可以是WebForms,也可以是MVC,我这里使用的是ASP.NET MVC项目)。图1.1所示

图1.1

 

  然后,在HomeController的Index Action中输入:登陆成功。

 

    [HandleError]
    
public class HomeController : Controller
    {
        
public ActionResult Index()
        {
            
return Content("登陆成功");
        }
    }

 

   二、Android客户端

  首先,创建一个Android项目,并新建一个MainActivity类。

  接着,编写一个访问IIS服务器的类。

 

package ld.com.authorize;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;

import android.util.Log;

public abstract class HttpHelper {

    
private final static String TAG = "HttpHelper";

    
public static String invoke() {
        String result 
= null;
        
try {
             
final String url = "http://192.168.1.104:180/";

            HttpPost httpPost 
= new HttpPost(url);
            DefaultHttpClient httpClient 
= new DefaultHttpClient();

            
//基本身份验证
            BasicCredentialsProvider bcp = new BasicCredentialsProvider();
            String userName 
= "liudong";
            String password 
= "123";
            bcp.setCredentials(AuthScope.ANY, 
new UsernamePasswordCredentials(
                    userName, password));
            httpClient.setCredentialsProvider(bcp);

            HttpResponse httpResponse 
= httpClient.execute(httpPost);

            StringBuilder builder 
= new StringBuilder();
            BufferedReader reader 
= new BufferedReader(new InputStreamReader(
                    httpResponse.getEntity().getContent()));
            
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
                builder.append(s);
            }
            result 
= builder.toString();
            Log.d(TAG, 
"result is ( " + result + " )");
        } 
catch (Exception e) {
            Log.e(TAG, e.toString());
        }
        Log.d(TAG, 
"over");
        
return result;
    }
}

  注意的是,我这里用户名和密码分别是:liudong和123。

 

  然后,修改layout文件:main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
="vertical" android:layout_width="fill_parent"
    android:layout_height
="fill_parent">
    
<TextView android:layout_width="fill_parent"
        android:layout_height
="wrap_content" android:text="@string/hello" />
    
<Button android:text="身份码验证" android:id="@+id/btnPassword"
        android:layout_width
="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>

 

  最后,修改MainActivity。

 

package ld.com.authorize;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    
private final String TAG = this.getClass().getSimpleName();

    
private Button btnPassword;

    
/** Called when the activity is first created. */
    @Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnPassword 
= (Button) this.findViewById(R.id.btnPassword);

        setInvokeOnClick();
    }

    
private void setInvokeOnClick() {
        btnPassword.setOnClickListener(
new OnClickListener() {

            @Override
            
public void onClick(View v) {
                
// TODO Auto-generated method stub
                AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {

                    
private ProgressDialog progressDialog;

                    @Override
                    
protected void onPostExecute(String result) {
                        
// TODO Auto-generated method stub
                        
// super.onPostExecute(result);
                        progressDialog.cancel();
                        Toast.makeText(MainActivity.
this, result,
                                Toast.LENGTH_SHORT).show();

                        Log.d(TAG, result);
                    }

                    @Override
                    
protected void onPreExecute() {
                        
// TODO Auto-generated method stub
                        super.onPreExecute();
                        progressDialog 
= new ProgressDialog(MainActivity.this);
                        progressDialog
                                .setProgressStyle(ProgressDialog.STYLE_SPINNER);
                        progressDialog.setTitle(
"调用中,请稍后...");
                        progressDialog.show();
                    }

                    @Override
                    
protected String doInBackground(Void... arg0) {
                        
// TODO Auto-generated method stub
                        try {
                            
return HttpHelper.invoke();
                        } 
catch (Exception e) {
                            
return null;
                        }
                    }

                };
                task.execute();
            }
        });
    }
}

 

  设置访问权限为:<uses-permission android:name="android.permission.INTERNET" />

 

  运行模拟器的效果如图2.1所示。

图2.1

 

  三、IIS部署

  首先、添加一个网站,如图3.1所示。

如图3.1

 

  接着,在进入计算机管理-->本地用户和组-->用户,新建一个用户,如图3.2所示。

图3.2

 

  然后,设置IIS的身份验证(图3.3所示)。

图3.3

 

  设置其身份验证模式为:基本验证或Window身份s验证(图3.4所示)。

图3.4

 

  最后,我们在浏览器中输入网址进行验证,验证结果见图3.5和图3.6。

图3.5

图3.6

 

  从图中我们可以发现,浏览该网页时需要用户名和密码。我们输入了正确的用户名和密码后就可以登录这个页面了。

 

  四,运行效果。

  见图4.1和图4.2所示。

图4.1

图4.2

 

 

  代码下载

  出处:http://www.cnblogs.com/GoodHelper/archive/2011/08/17/android_iis_01.html

  作者:刘冬.NET

  欢迎转载,但须保留版权。

posted @ 2011-08-17 19:34 刘冬.NET 阅读(1620) 评论(5) 编辑
摘要: 内容摘要 1.程序架构 2.通信协议 3.服务器源代码 4.客户端源代码 5.运行效果 一、程序架构 在开发一个聊天室程序时,我们可以使用Socket、Remoting、WCF这些具有双向通信的协议或框架。而现在,我正要实现一个C#语言作为服务器端、Android作为客户端的聊天室。由于服务器端和客户端不是同一语言(C#和java),所有我选择了Socket作为通信协议。 图1.1所示,我们可以看...阅读全文
posted @ 2011-07-08 02:26 刘冬.NET 阅读(4478) 评论(37) 编辑
摘要: 内容摘要 单向多对多关联映射 双向多对多关联映射 一、单向多对多关联映射 1.1 多对多关联映射描述 众所周知,持久化类的有三种对应关系:“一对一”、“一对多(多对一)”和“多对多”。在项目开发过程中,我们接触过权限系统。而权限系统中,“用户”和“角色”的对应关系往往就是“多对多”。 让我们看一下“多对多”的数据,如图1.1.1所示:图1.1.1 从数据中,我们能够观察到:多个用户(User)对应多个角色(Role)。构造“多对多”的关联关系,我们不仅需要用户(User)表和角色(Role)表,还需要用户和角色的关系表。通过这三张表的关系构造了“多对多”的关联关系。 让我们看一下代码: pu.阅读全文
posted @ 2011-03-04 00:26 刘冬.NET 阅读(3975) 评论(31) 编辑
摘要: 内容摘要 单向关联映射 双向关联映射 一、单向关联映射 1.1 单向关联映射的描述 让我们回顾一下之前讲的《多对一关联映射》,如图1.1.1所示,其实“一对多”关联映射就是“多对一”关联映射相反的映射。 图1.1.1 至于“一对多”单向关联映射的代码如下:publicclassStudent{publicvirtualint?ID{get;set;}publicvirtualstringName{get;set;}}publicclassClass{publicvirtualint?ID{get;set;}publicvirtualstringName{get;set;}publicvirt.阅读全文
posted @ 2011-03-03 15:36 刘冬.NET 阅读(3380) 评论(4) 编辑
摘要: 内容摘要 单向主键关联映射 双向主键关联映射 唯一外键关联映射 NHibernate的一对一关联映射有三种,单向主键关联映射、双向主键关联映射、唯一外键关联映射。 一、单向主键关联映射 我们模拟一个现实情况:学生(Student)和家庭(Family)的关系。在中国,目前实行计划生育,一个家庭只有一个孩子,孩子上学后就成为了学生。学生和家庭的关系可以认为是一对一的。 让我们看一下“一对一”的表结构,如图1.1所示:图1.1 让我们看一下“一对一”的实体类和映射文件: publicclassStudent{publicvirtualint?ID{get;set;}publicvirtualst.阅读全文
posted @ 2011-02-25 01:02 刘冬.NET 阅读(4279) 评论(20) 编辑
摘要: 内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一、多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为“多对一”、“一对一”、“多对多”。然而“多对一”是怎样描述的呢?让我们参考图1.1所示: 图1.1 学生表“T_Student”有两条记录,它们分别对应了班级表“T_Class”的主键值为“1”的同一条记录。所以这就是“多对一”的使用情景。 让我们看一下“多对一”持久化类的结构: publicclassClass{publicvirtualint?ID{get;set;}publicvirtualstringName{get;set;}}pub.阅读全文
posted @ 2011-02-24 11:12 刘冬.NET 阅读(4112) 评论(14) 编辑
摘要: 内容摘要 映射定义概括 基本映射常用标签 NHibernate的类型 一、映射定义概括 1.1 映射定义(Mapping declaration) 对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以对象为中心的, 意味着映射是按照持久化类的定义来创建的,而非表的定义。 让我们打开上节课的映射例子: Product.hbm.xml Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlight.阅读全文
posted @ 2011-02-24 00:21 刘冬.NET 阅读(3573) 评论(12) 编辑
摘要: 内容摘要    持久化类    持久化生命周期中的回调    合法性验证回调    一、持久化类(Persistent Classes)      1.1 什么是持久化类  回答这个问题之前先回答什么是持久化。所谓的持久化就是把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。然而持久化类就是持久化数据的载体,在应用程序中,用来实现业务问题实体的(如,在电子商务应用程序中的Customer和Order) 类就是持久化类。不能认为所有的持久化类的实例都是持久的状态——一个实例的状态也可能 是瞬时的或脱管的。 如果这些持久化类遵循一些简单的规则,NHiberna阅读全文
posted @ 2011-02-18 02:30 刘冬.NET 阅读(3786) 评论(19) 编辑