第五部分显示
第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