《Web Service 编程 --用C#.NET 开发网络服务》-北京希望出版社 我的学习笔记(也就是书上抄了一写东西而已) 特别说明:版权是原书所有!
个人对这本书的感觉,不必要去买了!
Web Service 编程 --用C#.NET 开发网络服务》-北京希望出版社
第一章 .NET 和.NET 框架
1.1 .NET 简介
什么是.NET? 很难用一句话把.NET说清楚,Microsoft是这样说的:“.NET 是一个革命性的新平台,他建立在开发的Internet协议和标准上,采用许多新的工具和服务用于计算和通信。”Mircrosoft 首席执行官鲍尔默说:“Microsoft.NET 代表一个集合,一个环境,一个可以做为平台支持下一代Internet的可编程结构。”这句话基本上简单扼要的表述了.NET 的其他特性。
1.2 .NET 的产品集合的特点
1.2.1 .NET 主要组成部分及其作用
1.Windows.Net (融入了.Net 技术的Windows)
2.Net Framework
.Net Framework的目的是便于开发商更加容易的建立网络应用程序和WEB Service,它的关键角色是提供了一个支持多种编程语言组件开发和执行的环境
从层次上看 .NET Farmework又包括三个主要的组成部分:通用语言运行时(Common Language Runtime),服务框架(Service Framework),上层的两类的应用模板-面向WEB 的网络应用程序模板(Web Forms /Web Service)和windows应用程序模板(Win Forms)
3.Net企业服务器
在MS宣称的“第三代Internet”中,NET 企业服务器是企业集成和管理各种基于WEB的各种应用的基础,他提供企业未来开展电子商务的高可靠性,高性能,高可伸缩性以及高可管理性。
他包括下面8个服务器,.NET 企业服务器的功能的描述:
● Application Center 2000:部署和管理基于WIN2002 之上的WEB 应用
● Biztalk Server 2000: 用于企业间交换商务信息(目前最受关注的)
主要是利用XML 文档,可以屏蔽掉 平台,系统的差异。使商业系统的集成成为可能!
主要功能:企业间可靠的文档交换系统,ERP 应用集成,商业流程自动化定制,管理和监控等
● Commerce Server2000: 用于快速创建在线电子商务
● Exchange 2000: 提供基于WIN2000 的通信和协作功能
● Host Integration Server 2000:为主机系统的组件集成提供方便
● Internet Security && Acceleration Server 2000: 主要解决企业应用安全性和可管理性的问题
● Mobile Information 2001 Server:为移动解决方案提供可靠而具有伸缩的平台
● SQL Server 2000:提供完全的数据库的数据分析解决方案
4模块构建服务(Building Block Services)
是.NET 平台中的核心网络服务的集合,主要包括以下几个组成部分:
● Internet XML通信,使Web 站点转变成灵活的服务来交换和处理数据
● Internet XML数据空间:在WEB 上提供安全的和可编程的XML 存储空间
● Internet动态更新:为快速开发和动态配置应用提供服务
● Internet 日程安排:继承工作,社会和私人的日历
● Internet 身份认证:提供从口令,钱包到生理数据等多等级身份认证的手段
● Internet 目录服务:与Internet 即时信息传递等服务
5 Orchestration
Orchestration是一种基于XML 的面向应用的软件集成和自动化的处理技术!
6 Visual Studio.Net
1.2.25 .NET的技术特征
.NET 包括4个重要的特点
● 软件变服务
● 基于XML 的共同语言
● 融合多种设备和平台
● 新一代的人机界面
1.3 .NET 框架概述
1.3.1 背景
.NET 框架是能简化高度分布式网络开发的计算平台
1.3.2 通用语言运行时
特点:
1 管理
2 安全
3 纠错性
4 快速
1.3.3 .NET 框架类库
使用.NET 框架类库可以开发以下的应用和服务
● 控制台应用
● 脚本或主机应用
● Windows GUI 应用 (Windows Forms 类是一个简化了Windows GUI 开发的,全面的可重用的类型集合。
● ASP.NET应用 (使用WEB FORMS 类)
● XML Web Service
● Windows 服务
1.3.4 客户端应用的开发
客户端应用是基于windows编程中最接近传统形式的应用。
1.35 服务器端的开发
服务器端的开发的应用是受控世界里的通过运行时主机实现的。非受控应用调用通用语言运行时可以使受控代码控制服务器的行为。
1.4 通用语言运行时(CLR)
1.4.1 概述
运行时的优点:
● 性能提高
● 可以使用构件用其他语言开发程序
● 类库提供了可扩展类型
● 提供了新的语言的特性,如:继承,接口,重载,支持多线程,支持异常处理
● 跨语言整和,特别是跨语言继承
● 自动内存管理(垃圾收集)
● 对象自描述
● 一次编写,到处执行
● 完全面向对象的设计
● 强类型安全
● 像VB 一样简单,C++ 一样强大
● 使用代表(Delegate),而不是指针保证安全性,使用/unsafe 选项也可以使用指针
1.4.2 自动内存管理
1 分配内存
2 释放内存
3 释放非受控资源的内存
1.5 装配集(Assemblies)
1.5.1 概述
装配集是使用NET 框架编程的基础部分,提供了下列功能:
1 包含了通用语言运行时执行的代码(一个装配集只有一个入口)
2 形成安全边界
3 确定一个引用范围边界
4 确定了个版本边界
5 形成了一个配置单元
6 使并行执行成为了可能
1.5.2 装配集的优点
装配集用来简化应用程序的配置和解决在基于控件的应用中经常出现的版本问题
1.5.3装配集的内容
装配集可以包含四个元素
● 装配集清淡,包含了装配集元数据
● 数据类型
● 实现这鞋类型的中间语言代码
● 一个资源集合
只有装配清单是必要的,但是对一个有意义的装配集来说类型和资源集合也是必须的
1.6 应用域 (无)
1.7 通用类型系统
1.7.1 概述
通用类型系统支持两种一般意义上的类型:(说明:所有的类型都是从System.Object类派生出来的)
1 值类型:包含他们的数据,值类型的实例也在堆栈中分配过在结构中分配!值类型和建立,用户定义或列举。值类型的变量都有他们自己的数据拷贝,因此对一个变量的操作不会影响到其他变量
2 引用类型:引用类型存储一个引用在值的内存地址中,在堆中分配!引用类型可以是自描述的类型,指针类型,接口类型。引用类型可能指向同一个对象,所以对一个变量的操作,也许会改变其他变量的值!
代码 1-1 显示了值类型和引用类型的区别
------------------------------------------
using System;
class Class1
{
public int Value=0;
}
class Test
{
static void Main()
{
int val1=0;
int val2=val1;
val2=123;
Class1 ref1=new Class1();
Class1 ref2=ref1;
ref2.Value=123;
Console.WriteLine("value:{0},{1}",val1,val2);
Console.WriteLine("ref:{0},{1}",ref1.Value,ref2.Value);
}
}
-------------------------------------------
1-1
输出结果是:
0,123
123,123
1.7.2 类型定义
类型定义包括:
● 类型中的属性的定义
● 类型的可见性
● 类型的名称
● 类型的基类
● 类型实现的接口
● 类型成员的定义
1.7.3 值类型
1 内嵌的值类型
.NET 框架定义了内嵌的值类型 如:System.Int32,System.Boolean
2 用户定义的值类型
值类型可以有域,属性,事件,还可以用静态的和非静态的方法,当被装箱时,并且可以实现0个过多个接口,值类型是封闭的,其他类不可以从他派生,可以在值类型上定义虚拟方法,这些虚拟方法可以从装箱或折箱的形式调用
代码 1-2 显示了怎么样唯一化一个复数 构造值类型
------------------------------------------
using System;
public struct Complex
{
public double r,i;
public Complex(double r,double i)
{
this.r=r;
this.i=i;
}
public Complex Reciprocal
{
get
{
if(r==0&&i==0)
throw new DivideByZeroException ();
double div=r*r+i*i;
return new Complex (r/div,-i/div);
}
}
public static explicit operator double (Complex a)
{
return a.r;
}
public static implicit operator Complex(double r)
{
return new Complex (r,0);
}
public static Complex operator+(Complex a)
{
return a;
}
public static Complex operator -(Complex a)
{
return new Complex (-a.r ,-a.i );
}
public static Complex operator +(Complex a,Complex b)
{
return new Complex (a.r+b.r,a.i+b.i);
}
public static Complex operator -(Complex a,Complex b)
{
return new Complex (a.r-b.r,a.i-b.i);
}
public static Complex operator *(Complex a,Complex b)
{
return new Complex (a.r*b.r-a.i*b.i ,a.r*b.i+a.i*b.r);
}
public static Complex operator /(Complex a,Complex b)
{
return a*b.Reciprocal ;
}
public override string ToString()
{
return String.Format ("{0}+{1}i",r,i); //this.r ,this.i how about ? yes
}
}
public class ValueTypeSample
{
public static void Main()
{
Complex a=new Complex (0,1);
Complex b=new Complex (1,-2);
Console.WriteLine ();
Console.WriteLine ("a="+a);
Console.WriteLine ("b="+b);
Console.WriteLine ("a+b="+(a+b));
Console.WriteLine ("a-b="+ (a-b));
Console.WriteLine ("a*b="+(a*b));
Console.WriteLine ("a/b="+ (a/b));
Console.WriteLine ();
Console.WriteLine ("(double)a="+(double)a);
Console.WriteLine ("(Complex)5="+(Complex)5);
}
}
-------------------------------------------
结果略
枚举是一种特殊类型的值类型,他是从System.Enum 继承的, 一个枚举有个 名字,一个基本类型和一个域集!。基本类型必须是内嵌的有符号或是无符号的整数类型( 如:Byte,Int32,UInt64)
枚举的一些限制
● 不能定义自己的方法
● 不能实现接口
● 不能定义属性和事件
代码1-3 显示了如何使用一小块域和普通枚举类型
-------------------------------------------
using System;
using System.Collections ;
// 定义枚举
public enum SomeRootVegetables
{
HorseRadish,
Radish,
Turnip,
}
[Flags] // what the mean?
public enum Seasons
{
None=0,
Summer=1,
Autumn=2,
Winter=4,
Spring=8,
All=Summer|Autumn|Winter|Spring, // why?
}
public class EnumerationSample
{
public static void Main()
{
Hashtable AvailableIn=new Hashtable ();
AvailableIn[SomeRootVegetables.HorseRadish ]=Seasons.All ;
AvailableIn[SomeRootVegetables.Radish ]=Seasons.Spring ;
AvailableIn[SomeRootVegetables.Turnip ]=Seasons.Spring |Seasons.Autumn ;
Seasons[] seasons=new Seasons []{
Seasons.Winter ,Seasons.Spring ,Seasons.Summer ,Seasons.Autumn };
for(int i=0;i<seasons.Length ;i++)
{
Console.WriteLine ("\t\nThe following root vegetables are harvested in"+seasons[i].ToString ()+":");
foreach(DictionaryEntry e in AvailableIn)
{
if(((Seasons)e.Value &seasons[i])>0)
Console.WriteLine ("\t"+((SomeRootVegetables)e.Key ).ToString ("G"));
}
}
}
}
----------------------------------------------
结果略
---------------------------------------------
class myapp
{
enum Color:byte
{red,white,bule}
public static void Main()
{
string buffer;
Color mycolor;
Console.WriteLine("enter a value for a color:0=red,1=white,2=bule");
mycolor=1;
switch(mycolor)
{
case Color.red:
System.Console.WriteLine("\n SWitched to red...");
break;
case Color.white:
System.Console.WriteLine("\n SWitched to d...");
break;
case Color.bule:
System.Console.WriteLine("\n SWitched to b...");
break;
default:
System.Console.WriteLine("s");
break;
}
System.Console.WriteLine("\n {0},{1}",mycolor,(int)mycolor);
}
}
---------------------------------------------------
1.7.4 其他
代表(Delegate) 类似C++函数指针
接口可以有 静态成员,嵌套类型,抽象虚拟成员,属性,事件。 每一个实现了接口的类必须定义接口中申明的抽象成员
接口有如下的限制:
● 接口可以声明任何种类,但是接口中的成员必须是PUBLIC 的
● 接口以及成员不能有安全限定
● 接口可以定义类的构造函数,但不能有构造实例
指针是一个特殊的类型变量,运行时支持三种类型的指针:受控指针,非受控指针,非受控函数指针。
1.8 元数据和自描述控件
代码1-4
略
代码1-5
略