您的位置:首页 > 编程语言 > C#

C#高级编程(第7版)读书笔记(四)

2012-03-07 15:09 387 查看
第五部分显示

第35章核心WPF

第36章用WPF编写业务应用程序

第37章用WPF创建文档

第38章SilverLight

第39章Windows窗体

39.1创建windows窗体应用程序

39.2Control类

System.Windows.Forms.Control继承自System.ComponentModel.Component类

Size,Location,Bounds包含滚动条和标题栏,ClientSize工作区,Dock停靠,Anchor瞄定

PointToClient(),PointToScreen(),RectangleToScreen()

外观属性,事件

Windows交互:Handle,IsHandleCreated,访问Windows消息可重写WndProc(Message)

Invalidate()使空间区域失效,以进行重绘。

39.3标准控件和组件

PerformClick()方法,可模仿按钮单击事件

ButtonBase:Button,CheckBox,RadioButton

数组绑定到DataGridView,会显示数组对象的第一个公共属性

可绑定泛型集合,显示公共属性,可标记[Browsable(false)]不显示在grid,对表格数据的修改会调用实际集合数据属性的set访问器修改

ErrorProvider组件,验证错误时调用

RichTextBox:LoadFile(),SaveFile()

MaskedTextBox:自动格式化

ToolStrip控件:派生于Component

39.4窗体

Form派生于ContainerControl:ScrollableControl:Control

启动事件顺序:

构造函数,Visible为true之前

Load

Activate

构造函数,Visilble为true之后代码

Closing

Closed

Deactivate

Application.Exit()如果有窗口打开不会执行Closing,Closed,需考虑Dispose()清理资源

Application.EnableVisualStyles()(.net1.1)启动应用程序可视化样式

多文档界面:IsMdiContainer,ActiveMdiChild,子窗体MdiParent,LayoutMdi()

自定义用户控件:新建控件项目

第40章核心Asp.net

40.1asp.net概述

使用IIS

Asp.net站点,没有aspx.designer.cs,动态编译,可上传.cs文件。引用的其他程序集自动放到bin目录,.net程序集只在config中<compilation><assemblies>中进行添加。主要用于开发阶段

Asp.net应用程序,部署前编译。MVC只能用于应用程序

Asp.net页面无状态,通过viewstate和postback

代码不隐藏页面,可同时添加<script runat=”server”>的c#代码和<script>客户代码块

40.2asp.netweb窗体

AutoEventWireUp事件处理程序自动关联页面代码,如Page_Load

可禁用控件或页面的viewstate,以提高性能

40.3ADO.NET和数据绑定

<ItemTemplate>

<%# expression %>

<%# Eval() %>

<%# Bind() %>可插入服务器控件属性中

<SelectParameters><asp:ControlParameter >

40.4应用配置

Global.asax

第一次启动应用程序:Application_Start,创建HttpApplication实例池

Application_End所有HttpApplication实例完成任务

单个用户启动会话Session_Start

Application_BeginRequest这两个事件在会话中可多次触发

Application_EndRequest

Session_End手动或超时终止

第41章asp.net的功能

41.1用户控件和自定义控件

用户控件<%@ Control %>,派生自UserControl

<%@Register TagPrefix= TagName= Src= %>

自定义控件从WebControl派生

生成的程序集可放在bin目录或gac

如果是web站点还可把.cs文件直接放在App_code目录,必须添加名称空间

重写Render(HtmlTextWriter)方法,这个方法输出html

<%@Register TagPrefix= Namespace= Assembly= %>

41.2母版页

<%@ Master %>

<asp:ContentPlaceHolder >

<%@Page MasterPageFile=”” Title=”” %>

子页面可以包含不是指令的非根级内容,脚本元素和Content控件

<asp:Content ContentPlaceHolderId=”” >

可通过Page.Master引用母版页的公共成员,也可用FindContro()l查找控件

可嵌套母版页

<%$ Key:Name %>读取配置文件内容

Css:#格式化指定id元素,.格式化class指定元素

41.3站点导航

SiteMapPath,Menu,TreeView

.sitemap站点地图文件,默认xml提供程序自动查找web.sitemap文件名,如用默认提供程序不要修改。

可在config文件<siteMap defaultProvider=””><providers><add name= type= siteMapFile=

securityTrimmingEnabled= />设置默认提供程序

也可设置SiteDataSource控件SiteMapProvider属性

<siteMap><siteMapNode>Title,Url,roles,description

41.4安全性

aspnet_regsql创建数据库

Asp.net配置管理可进行Forms验证及角色的设置

通过修改config文件的方式来完成。

<roleManager enabled=”true”>

<authentication mode=”Forms”>

默认根据machine.config中配置的连接字符串进行的连接,可通过手动设置config进行修改。

设置<system.web><memership>和<roleManage>的<providers>

控制权限:<authorization>

<location path=>控制其他目录设置

Context.User上下文提取用户

41.5主题

Theme主题属性优先

StyleSheetTheme控件属性优先

<%@ Page Theme=””>或

<system.web><pages Theme=””>或

Page_PreInit()事件OnPreInit()中Page.Theme=””

App_Themes目录添加主题名,添加css样式表和skin外观文件。

41.6web部件

WebPartZone区域中的控件自动变成web部件

连接控件通过IDataProvider

41.7asp.net ajax

部分页面回发,部分更新

41.8ajax概念

用到许多技术Html,Xhtml,xml,css,javascript,xmlhttprequest,dom

41.9asp.net ajax

System.Web.Extensions.dll:包含ajax扩展和ajax库javascript,通过ScriptManager控件调用。

System.Web.Extensions.Design.dll:包含ajax服务器控件

Asp.net ajax control toolkit

41.10asp.net ajax 网站示例

41.11支持asp.net ajax的网站配置

<system.web.extensions><scripting><webServices>

使用toolkit,程序集放到bin目录

<controls>

<add namespace= assembly= tagprefix= >

或通过<%@ Register %>使用

41.12添加asp.net ajax功能

41.13使用ajax库

第42章asp.net动态数据和MVC

动态数据:根据已有数据快速构建网站,如电子商务网站

MVC:从某个设想开始,创建所有类型网站。用户界面和业务逻辑清晰分开。适合于企业级网站,可简化单元测试。

42.1路由

路由规范集合:RouteTable.Routes

RouteTable.Routes.Add(“RouteName”,new Route(“path/{pathparameter}”,

new PageRouteHandler(“target.aspx”)));

匹配url:http://domain/path/{parameter}

路由授权,可以不检查物理url权限,new PageRouteHandler(“.aspx”,false)

可设置默认参数值:new RouteValueDictionary{{“parameter”,”defaultvalue”}}

参数约束:正则或IRouteConstraints接口new RouteValueDictionary{{“parameter”,”yes|no”}}

路由顺序:从前往后,可传递数据标记new RouteValueDictionary{{“cusdata”,”value”}}

Page.RouteData.Values读取参数值:

Page.RouteData.DataTokens读取数据标记:

可内联使用表达式生成器<%$ RouteValue:parametername %>

<%$ RouteUrl:parametername= routename= %>

数据查询使用路由参数:<asp:routeparameter RouteKey= >

42.2动态数据

选择网站模板

创建数据源Linq to Sql类或Entity类

搭框架global中创建MetaModel,Application_Start调用

DefaultMode.RegisterContext(typeof(YourDataContextType),new ContextConfiguration(){});

42.3MVC

模型、视图、控制器

适用于多人同时开发,单元测试变得简单。

复杂性上升,不能使用某些特性。

Asp.net mvc2 web application项目

先选择数据源

添加模型,放到Models文件夹

Cotrollers文件夹,添加控制器

添加索引,实现Index方法

添加视图,右键Add View

Global.asax配置路由

动作链接:<%= Html.ActionLink() %>

第六部分 通信

第43章WCF

43.1WCF概述

合并了WebService,.net remoting,消息队列,EnterpriseServices

独立于平台的通信的核心服务的功能:

SOAP,WSDL,REST,JSON

43.2简单的服务和客户端

新建组件库项目

添加ado.net Entity Data Model

新建WCF服务库项目

服务协定:接口用[ServiceContract()],方法用[OperationContract]标记

App.config:

<services>

<service name= >

<host>

<baseAddresses>

<add >

</baseAddresses>

</host>

<endpoint contract= binding= address= >

WCF服务宿主和WCF客户端:

启动库项目,会打开WCF服务宿主;

调试配置/client:”WcfTestClient.exe”,启动测试客户端

自定义服务宿主:

引用WCF类库,复制app.cofig,修改WCF类库宿主设置

新建ServiceHost类,用WCF类库的类构造

.Open()打开

WCF客户端:

添加服务引用

诊断:

配置跟踪

43.3协定

类型:数据协定,服务协定,消息协定

1数据协定

[DataContract()]

[DataMember]

2版本问题

修改[DataContract(Namespace=””)]名称空间值,包含日期

3服务协定

[ServiceContract()]

[OperationContract]

4消息协定

需要完全控制SOAP消息

[MessageContract()]

[MessageHeader]

[MessageBodyMember(Position=0)]

43.4服务的实现

服务的实现用[ServiceBehavior]标记

[OperationBehavior]

如服务绑定设置了SessionMode可选属性,必须修改配置文件的binding

1编程方式创建客户端

ChannelFactory<TChannel>,CreateChannel()

var binding=new WSHttpBinding();

var address=new EndpointAddress(“http://...”);

var factory=new ChannelFactory<IInterface>(binding,address);

IInterface channel=factory.CreateChannel();

channel.MethodName();

factory.Close();

2错误处理

[FaultContract(typeof(StateFault))]

[OperationContract]

43.5绑定

WS开头的绑定独立于平台

43.6宿主

Windows应用程序宿主

WAS宿主:一个站点和.svc文件,可直接使用WCF库

WebServiceHost类

43.7客户端

创建代理访问服务:

Vs添加服务引用

Svcutil.exe

ChannelFactory类

43.8双工通信

DuplexChannelFactory<T>\

第44章Windows WF4

44.1示例

Workflow console项目

44.2活动

层次结构

派生需重写Execute()

44.3自定义活动

44.4工作流

WorkFlowInvoker类

WorkFlowApplication

WorkFlowServiceHost

第45章对等网络

45.1P2P网络概述

考虑客户端之间的通讯方式,有些客户端从其他客户端访问资源

客户端:发现、连接、通信其他客户端;核心问题

对等机不需要服务器,彼此连接的对等机集合称为网、云、图

P2P适合于:内容发布,合作,多用户通信,分布式处理,web2.0

45.2Microsoft Windows Peer-to-Peer Network

是Microsoft p2p技术实现方式(XPsp2,win7,vista)

PNRP:Peer Name Resolution Protocol

PNM(vista):People Near Me

PNRP允许客户端注册一个端点(对等机名称)

netsh p2p pnrp cloud show list查询连接什么类型云

PNM在windows meeting space程序中使用,可通过控制面板使用

45.3构建p2p应用程序

System.Net.dll

System.Net.PeerToPeer

System.Net.PeerToPeer.Collaboration空间

封住PNRP的API,注册对等机,解析对等机

PeerName类:PeerName pn=new PeerName(“Peer classifier”,PeerNameType.Secured);

PeerNameRegistration pnr=new PeerNameRegistration(pn,8080);

设置pnr的Comment,Data,EndpointCollection

pnr.Start()注册

pnr.Stop()删除

PeerNameResolver类解析对等机:

PeerName pn=new PeerName(“0.Peer classifier”);

PeerNameResolver pnres=new ..();

PeerNameRecordCollection pnrc=prnes.Resolver(pn,Cloud.AllLinkLocal,5);

PeerCollaboration类:

SignIn(),SignOut()

GetPeersNearMe()

PeerContact

第46章消息队列

System.Messaging

46.1概述

消息队列就是应用程序之间通信的电子邮件。

1使用消息队列的场合

电子商务网站

2消息队列功能

消息队列是windows操作系统的一部分:

可以断开连接发送

使用快捷模式发送,消息存储在内存中

可以使用有保证的交付方式发送

访问控制列表保护消息队列

46.2Message Quening产品MSMQ

Windows server2008R2(5.0版本),Windows server2003(3.0版本)

必须启动Message Queuing服务

46.3消息队列体系结构

1消息

2消息队列

存储在磁盘的消息位于system32\msmq\storage

消息队列是消息存储库

46.4MessageQuening管理工具

1创建消息队列

控制面板-计算机管理-服务和应用程序。必须安装MessageQuening

2消息队列属性

创建后可在属性窗口设置属性

46.5消息队列的编程实现

1创建消息队列

MessageQuene.Create(“host\quenename”)

私有队列路径名必须包含Private$

创建队列需要权限,所有队列通常由安装程序创建

2查找队列

MessageQuene.GetPubliceQuenes[ByLabel/Category]()

GetPrivateQuenesByMachine()

3打开已知队列

if MessageQuene.Exists(“”)

new MessageQuene(“”)

new MessageQuene(@”FormatName:PUBLIC=….”)

4发送消息

queen.Send(“”,”Label”)

消息格式化程序:Formatter属性指定,默认XmlMessageFormatter,实现IMessageFormatter接口。还有Binary和ActiveX格式化程序

接收消息Receive(),foreach,MessageEnumerator,quene.GetMessageEnumerator()

BeginReceive()

BeginPeek()

46.6课程订单应用程序

46.7接收结果

确认队列:

message.AdministrationQuene=new MessageQuene(“”)

message.AcknowledgeType=AcknowledgeTypes.FullReceive

.UseDeadLetterQuene

.TimeToReachQuene,.TimeToBeReceived

响应队列:

.ResponseQuene

响应ID,.CorrelationId

46.8事务队列

保证消息到达顺序及次数

Create时第二个参数为true

var transaction=new MessageQueneTransaction();

transaction.Begin();

quene.Send(“”,transaction)

quene.Send(“”,transaction)

transaction.Commit()

transaction.Abort()//如果出错

46.9消息队列和WCF

46.10消息队列的安装

MessageQueneInstaller类

第47章Syndication

47.1System.ServiceModel.Syndication空间

用于RSS和Atom格式联合

Atom10FeedFormatter,Rss20ItemFormatter

47.2读取联合源的示例

new Rss20FeedFormatter().ReadFrom(xmlreader)

47.3提供联合源的示例

Syndication Service Library模板

附录

Windows api代码包,windowsapicodepack
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: