XMPPFramework核心类介绍

概念知识

签到要交账号,而所谓的账号其实就是是用户唯一标识符(JID),在XMPP中以XMPPJID类来表示。那么,用户唯一标识(JID)有啊做?

JID一般由三片组成:用户称,域名与资源名,格式为user@domain/resource,例如: test@example.com /Anthony。对应于XMPPJID类中的老三只属性user、domain、resource。 

如若没有设置主机名(HOST),则采取JID的域名(domain)作为主机名,而端口号是可选的,默认是5222,一般也没有必要改动它。

第4节,实例管理

XMPPFramework结构

在进下一致步事先,先叫大家讲话说XMPPFramework的目结构,以便新手们重新爱读懂文章。我们来瞧下图:

葡京在线开户 1

尽管如此此出过多独目录,但是我们当出中挑大梁不过关注Core和Extensions这点儿单目录下的接近。各个目录主要为此来涉及嘛的?

  • Authentication:这无异于看名字便掌握和授权验证相关的。
  • Categories:主要是有的扩大,尤其是NSXMLElement+XMPP扩展是必不可少之。
  • Core:这里是XMPP的骨干文件目录,我们尽重点的眼神还是要放在这目录上。
  • Extensions:这个目录是XMPP的恢宏,用于扩张各种协商和各种独立的意义,其下每个子目录都是相应之一个独立的子功能。我们绝常用到之效用来Reconnect、Roster、CoreDataStorage等。
  • Utilities:都是辅助类,我们开发者不用关心这里。
  • Vendor:这个目录是XMPP所引用的老三在类库,如CocoaAsyncSocket、KissXML等,我们也非用关爱这里。

翻阅到者,对XMPPFramework的结构有了解了咔嚓!

提个醒:该图标代表附近的文本属于警告信息。

XMPPStream类

咱们如果与服务器连接,就非得透过XMPPStream类了,它提供了重重底API和属性设置,通过socket来兑现之。我们视Verdor目录了呢,包含了CocoaAsyncSocket这个大资深的socket编程库。XMPPStream类还遵循并实现了GCDAsyncSocketDelegate代理,用于客户端与服务器交互。

 
@interface XMPPStream : NSObject <GCDAsyncSocketDelegate>
 

当我们创建XMPPStream对象后,我们要装代理,才能够回调我们的代办方,这个是支撑multicast
delegate,也就是说对于一个XMPPStream对象,可以装多单代理对象,其中协议是XMPPStreamDelegate:

 
- (void)addDelegate:(id)delegatedelegateQueue:(dispatch_queue_t)delegateQueue;
 

设当我们无欲某XMPPStream对象继续接收到代办回调时,我们经过如此的法来移除代理:

 
- (void)removeDelegate:(id)delegatedelegateQueue:(dispatch_queue_t)delegateQueue;
- (void)removeDelegate:(id)delegate;
 

对接下,我们设安装主机与端口,通过安装这半只属性:

 
/**
* The server's hostname that should be used to make the TCP connection.
* 注释太长,简单说就是主机。这个属性是可选设置的,如果没有设置主机,默认会使用domain
*/
@property (readwrite, copy) NSString *hostName;
 
/**
* The port the xmpp server is running on.
* If you do not explicitly set the port, the default port will be used.
* If you set the port to zero, the default port will be used.
*
* The default port is 5222.
**/
@property (readwrite, assign) UInt16 hostPort;
 

XMPPStream有XMPPJID类对象作为性能,标识用户,因为咱们累很多操作都要到myJID:

 
@property (readwrite, copy) XMPPJID *myJID;
 

假若管理用户在线状态的就交由XMPPPresence类了,它同于用作XMPPStream的习性,组合及XMPPStream中,后续很多关于用户的操作是需要交处理用户状态的:

 
/**
* Represents the last sent presence element concerning the presence of myJID on the server.
* In other words, it represents the presence as others see us.
*
* This excludes presence elements sent concerning subscriptions, MUC rooms, etc.
*
* @see resendMyPresence
**/
@property (strong, readonly) XMPPPresence *myPresence;
 

本书约定

XMPPStreamDelegate

斯协议是很重大之,我们的无数生死攸关操作都集中在这协议的代理回调上。它分为好几种植类型的代办API,比如授权的、注册之、安全之相当于:

 
@protocol XMPPStreamDelegate
@optional
// 将要与服务器连接是回调
- (void)xmppStreamWillConnect:(XMPPStream *)sender;
 
// 当tcp socket已经与远程主机连接上时会回调此代理方法
// 若App要求在后台运行,需要设置XMPPStream's enableBackgroundingOnSocket属性
- (void)xmppStream:(XMPPStream *)sendersocketDidConnect:(GCDAsyncSocket *)socket;
 
// 当TCP与服务器建立连接后会回调此代理方法
- (void)xmppStreamDidStartNegotiation:(XMPPStream *)sender;
 
// TLS传输层协议在将要验证安全设置时会回调
// 参数settings会被传到startTLS
// 此方法可以不实现的,若选择实现它,可以可以在
// 若服务端使用自签名的证书,需要在settings中添加GCDAsyncSocketManuallyEvaluateTrust=YES
//
- (void)xmppStream:(XMPPStream *)senderwillSecureWithSettings:(NSMutableDictionary *)settings;
 
// 上面的方法执行后,下一步就会执行这个代理回调
// 用于在TCP握手时手动验证是否受信任
- (void)xmppStream:(XMPPStream *)senderdidReceiveTrust:(SecTrustRef)trust
                                      completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler;
 
// 当stream通过了SSL/TLS的安全验证时,会回调此代理方法
- (void)xmppStreamDidSecure:(XMPPStream *)sender;
 
// 当XML流已经完全打开时(也就是与服务器的连接完成时)会回调此代理方法。此时可以安全地与服务器通信了。
- (void)xmppStreamDidConnect:(XMPPStream *)sender;
 
// 注册新用户成功时的回调
- (void)xmppStreamDidRegister:(XMPPStream *)sender;
 
// 注册新用户失败时的回调
- (void)xmppStream:(XMPPStream *)senderdidNotRegister:(NSXMLElement *)error;
 
// 授权通过时的回调,也就是登录成功的回调
- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender;
 
// 授权失败时的回调,也就是登录失败时的回调
- (void)xmppStream:(XMPPStream *)senderdidNotAuthenticate:(NSXMLElement *)error;
 
// 将要绑定JID resource时的回调,这是授权程序的标准部分,当验证JID用户名通过时,下一步就验证resource。若使用标准绑定处理,return nil或者不要实现此方法
- (id <XMPPCustomBinding>)xmppStreamWillBind:(XMPPStream *)sender;
 
// 如果服务器出现resouce冲突而导致不允许resource选择时,会回调此代理方法。返回指定的resource或者返回nil让服务器自动帮助我们来选择。一般不用实现它。
- (NSString *)xmppStream:(XMPPStream *)senderalternativeResourceForConflictingResource:(NSString *)conflictingResource;
 
// 将要发送IQ(消息查询)时的回调
- (XMPPIQ *)xmppStream:(XMPPStream *)senderwillReceiveIQ:(XMPPIQ *)iq;
// 将要接收到消息时的回调
- (XMPPMessage *)xmppStream:(XMPPStream *)senderwillReceiveMessage:(XMPPMessage *)message;
// 将要接收到用户在线状态时的回调
- (XMPPPresence *)xmppStream:(XMPPStream *)senderwillReceivePresence:(XMPPPresence *)presence;
 
/**
* This method is called if any of the xmppStream:willReceiveX: methods filter the incoming stanza.
*
* It may be useful for some extensions to know that something was received,
* even if it was filtered for some reason.
**/
// 当xmppStream:willReceiveX:(也就是前面这三个API回调后),过滤了stanza,会回调此代理方法。
// 通过实现此代理方法,可以知道被过滤的原因,有一定的帮助。
- (void)xmppStreamDidFilterStanza:(XMPPStream *)sender;
 
// 在接收了IQ(消息查询后)会回调此代理方法
- (BOOL)xmppStream:(XMPPStream *)senderdidReceiveIQ:(XMPPIQ *)iq;
// 在接收了消息后会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidReceiveMessage:(XMPPMessage *)message;
// 在接收了用户在线状态消息后会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidReceivePresence:(XMPPPresence *)presence;
 
// 在接收IQ/messag、presence出错时,会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidReceiveError:(NSXMLElement *)error;
 
// 将要发送IQ(消息查询时)时会回调此代理方法
- (XMPPIQ *)xmppStream:(XMPPStream *)senderwillSendIQ:(XMPPIQ *)iq;
// 在将要发送消息时,会回调此代理方法
- (XMPPMessage *)xmppStream:(XMPPStream *)senderwillSendMessage:(XMPPMessage *)message;
// 在将要发送用户在线状态信息时,会回调此方法
- (XMPPPresence *)xmppStream:(XMPPStream *)senderwillSendPresence:(XMPPPresence *)presence;
 
// 在发送IQ(消息查询)成功后会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidSendIQ:(XMPPIQ *)iq;
// 在发送消息成功后,会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidSendMessage:(XMPPMessage *)message;
// 在发送用户在线状态信息成功后,会回调此方法
- (void)xmppStream:(XMPPStream *)senderdidSendPresence:(XMPPPresence *)presence;
 
// 在发送IQ(消息查询)失败后会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidFailToSendIQ:(XMPPIQ *)iqerror:(NSError *)error;
// 在发送消息失败后,会回调此代理方法
- (void)xmppStream:(XMPPStream *)senderdidFailToSendMessage:(XMPPMessage *)messageerror:(NSError *)error;
// 在发送用户在线状态失败信息后,会回调此方法
- (void)xmppStream:(XMPPStream *)senderdidFailToSendPresence:(XMPPPresence *)presenceerror:(NSError *)error;
 
// 当修改了JID信息时,会回调此代理方法
- (void)xmppStreamDidChangeMyJID:(XMPPStream *)xmppStream;
 
// 当Stream被告知与服务器断开连接时会回调此代理方法
- (void)xmppStreamWasToldToDisconnect:(XMPPStream *)sender;
 
// 当发送了</stream:stream>节点时,会回调此代理方法
- (void)xmppStreamDidSendClosingStreamStanza:(XMPPStream *)sender;
 
// 连接超时时会回调此代理方法
- (void)xmppStreamConnectDidTimeout:(XMPPStream *)sender;
 
// 当与服务器断开连接后,会回调此代理方法
- (void)xmppStreamDidDisconnect:(XMPPStream *)senderwithError:(NSError *)error;
 
// p2p类型相关的
- (void)xmppStream:(XMPPStream *)senderdidReceiveP2PFeatures:(NSXMLElement *)streamFeatures;
- (void)

下列为本书的印刷体约定:

附录B,服务发布暨订阅

本章首先阐述了WCF的艺原理,并描述了WCF的基础概念与构建模块,例如地方(Addresses)、契约(Contracts)、绑定(Bindings)、终结点(Endpoints)、托管(Hosting)以及客户端(Clients)。在本章最后还讨论了WCF体系架构,它将凡辅助我们领略后面章节的首要。本章假定读者既了解面向服务之思索与优势。如果您免享这方面的学识,可以率先看附录A的始末。即使你早已熟悉了WCF的功底概念,我依然建议你足足能够迅速地浏览本章的情,它不光会巩固你曾有的文化,更在于本章介绍的片辅助类与技能术语有助于你读书全书。

说到底,我只要感谢自己的老小。我之贤内助Dana,是公持之以恒地鼓励自己,让自己力所能及写下自己之所思和所得,但可牺牲了随同您和姑娘等的可贵时间。感谢自己的父母,是你们带来为了自本着工程学的无尽热爱。我还要将本书献给自己之点滴个丫头,7寒暑的Abigail,4寒暑的Eleanor。对于自身而言,可爱之你们就是是本人的通世界。

2001年8月,我在微软首糟糕询问及用托管代码重写COM+的技术细节。随后整个正常,直到2002年7月,在对C#2.0发战略设计评审中,负责Remoting的主次经理提出了一个滚滚的计划,试图用Remoting重写吗开发者真正会利用的技艺。同时,微软为当营合作,共同为ASMX中之web服务制订全新的安全专业,起草一层层附加的web
服务规范说明书。

设若没WCF(Indigo)项目经理们直接以来的支撑以及援助,我一向无容许在WCF诞生的新便能熟练掌握这门技术。我不能不感谢自己的情人Steve
Swartz,作为WCF的一律称呼架构师,他不仅仅奉献了他的学问和胆识,还有他的热心,始终不厌其烦地当IM(即时通讯工具)之上与自身探讨相关问题。感谢Yasser
Shohoud,Doug Purdy以及Shy
Cohen,感谢他们即本书作出的精彩而还要要之设计复审,同时还要感谢Krish
Srinivasan,感谢他当软件工程学上一经哲学家一般的远见卓识。能够和你们一起合作,是自己三生侥幸,也是自己于上掌握WCF过程中的关键得。以下WCF程序员则成仁了她们的年月,帮助自己说明了WCF这门技术:Andy
Milligan, Brian McNamara, Eugene Osovetsky, Kenny Wolf, Kirill
Gavrylyuk, Max Feingold, Michael Marucheck, Mike Vernal, and Steve
Millet。同时还要谢这个小组的经理Angela Mills。

本章致力为介绍服务契约的宏图和开发。首先,你见面了解及有有效之艺,包括劳动契约的重载与后续与其他高级技术。然后,本章深入探讨了争筹划和分解契约,以便于服务之选用、可维护性以及可扩展性。最后,本章还拿为而出示了什么样通过公开契约元数据好运行时的相互编程。

本书涵盖了颇具规划出基于WCF的面向服务应用程序所欲的知识及技术。通过本书,你可以视什么样用WCF内建的风味,例如服务托管、实例管理、并作管理、事务、离线队列调用以及安全。本书会呢您出示如何采取这些特色,并探索它们在这种特定的规划思路下之贯彻原理。你不光能了解及WCF编程技术,以及有关的网知识,同时还包了相应的设计方案、诀窍、最佳实践与在的缺点。我用站在软件工程的立足点阐述本书的每个主题与风味,是盖自己梦想它能帮忙读者不仅使成为同名为WCF专家,而且还要成为平等叫做优秀之软件工程师。本书带吃你的这种认知能够使您要是虎添翼,让您的应用程序在可维护性、可扩展性、可重用性以及高效性方面,更加吻合软件工程的视角。

第2节,服务契约

有关本书技术内容的见地要问题,可以发送邮件及bookquestions@oreilly.com。

咱们尊重图书的版权要求,然而并非必须。图书版权通常包括标题,作者,出版商以及ISBN。例如:”Programming
WCF Services by Juval Löwy. Copyright 2007 O’Reilly Media, Inc.,
978-0-596-52699-3.”

本着本身而言,WCF就是下同样代表开发者平台,它在异常酷程度达包容了最初的.NET编程理念。任何.NET开发者都可以动用WCF,而并非考虑应用程序的类别、规模要行业领域。WCF是同样山头基础技术,它提供了变通服务以及应用程序的“终南捷径”,完全符合我所认同的可以的计划性则。WCF从同开始就是是工程化的,能够简化应用程序的开销与配置,降低开发成本。WCF服务用于构建面向服务之应用程序,不管这些程序是独自的桌面应用程序,还是Web应用程序;是劳务,还是高端的企业应用程序。

O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international/local)
707-829-0104 (fax)

相当方便粗体字

您呢得以透过以下地方联系作者:http://www.idesign.net

除却微软的积极分子,我还要感谢Norman Headlam和Pedro
Felix,你们让了我充分有价之举报。感谢Nicholas
Paldino的助。Nick对于.NET框架的知是无比之,正是以他展现微知著的周密精神,才会管本书的人头。

附录C,WCF编码规范

除,本书包含了大量自己所编纂的套件类、工具类以及协助类。这些类似或可以提高你的出效率,保障支出之WCF服务之成色。我还支付了一个基于WCF技术之袖珍框架,用以弥补部分规划缺陷,或者简化确切的天职,使该能自动化实现。在写被,我像介绍WCF技术那样,详细地介绍了这些工具、理念和技术。同时,我开之框架则也公演示了何等对WCF进行扩展。

  public int Number
  {get;set};
}

斜体

本书回避了无数WCF的实现细节,更多之是讲求以WCF的实用性和方向:如何利用WCF技术?如何挑选有效的筹划基准与编程模型?本书大量运了.NET
2.0技,从某种角度来说,本书也得以算一依高级的C#技巧书籍。

而你当行使实例代码过程中窥见了错误,或者想赢得上述授权,敬请联系我们:permissions@oreilly.com.

于我思念要当实例代码中专门注明有平情节,我会在调用Debug类的Assert静态方法:

利用实例代码

就对各种类型操作的处理,客户端能够调用服务,遵循有关的统筹标准,例如如何改善及壮大基础功能,以支持回调的安与销毁,管理回调端口和通道,提供项目安全的双向代理(Duplex
Proxies)。

对读者的使

笔者以IDesign网站上颁布了本书提及的整整代码库,共计超过120独下载内容,包括WCF基础,契约设计,实例管理,操作与调用,错误,事务,并发,队列以及安全。下载内容包含了本书大部分能运转的代码段。

以下是开被各个章节以及附录的摘要:

关于本书的布局

率先,本章从整体上介绍了采用工作之目的,然后讨论了事情服务之浩大表征:事务管理架构、事务传播(Transaction
Propagation)配置、WCF提供的声明性事务支持,以及客户端创建工作的主意。最后,本章讨论了跟工作相关的计划规范,例如事务服务状态管理及实例模式。

第10章,安全

Safari® Enabled

 “磨刀不误砍柴工”,这部分情节好又好地帮忙而就工作。总的来说,你绝不获得授权就好于公的次和文档中行使本书的代码,除非你针对代码最根本之有进行了次差加工。例如,使用本书的代码有编写程序,并不需要特别的批准,但销售或者分发包含本书实例代码的光盘则要获得认可。引用本书的实例代码或问题解答是不需要授权的,然而一旦只要用本书实例中的中心代码放入到您的成品文档中,则需要取得批准。

int number = 1+2;
Debug.Assert(number == 3);

等宽字

用来示范代码、语句、命名空间、类、程序集、接口声明、操作符、特性和保留字

附录B展现了我定义的框架,它实现了公布-订阅事件管理之解决方案。框架可以假设你仅仅待编制一两行代码就可知公布和订阅服务。发布-订阅模式属于第5章的情节,之所以用其放入到附录中,是坐它们采用了其他章节的内容,例如事务与队列调用。

本书的网页列有了勘误表、实例以及另附加信。你可由此以下地方访问:
http://www.oreilly.com/catalog/9780596526993

若是要动本书,需要安装.NET 2.0、Visual Studio 2005、.NET
3.0之颁发组件,以及.NET 3.0付出之SDK和Visual Studio 2005底.NET
3.0扩展版。除非特别提醒,本书适用的操作系统包括Windows XP、Windows
Server 2003以及Windows
Vista。同时,你还欲安装有增大的Windows组件,如MSMQ和IIS。

public class SomeClass
{…}

第3回,数据契约

差不多,附录C涵盖了全书提及的竟是没有提及的极品实践。规范在于论述应该“如何做”以及“怎么开”,而无表其缘由。隐藏在规范内部的功底原理可以于本书的其余部分找到。本标准而还利用了本书讨论的增援类。

什么利用本书

附录A为那些愿意了解面向服务之读者供,介绍了我当面向服务之切实可行以。附录定义了面向服务应用程序(而不普通所谓的架构)以及服务自,检验了其当方法学方面的优势。附录还为来了面向服务的规格,通过多数应用程序所急需之实用要点,强化了面向服务的抽象原则。

Assert方法好收起Boolean型语句,当值为false时,抛来怪。

本章描述了客户端如何通过队调用服务,从而支持异步与离线工作。本章首先介绍了如何创造及安排队列服务,然后,重点讲解了例如事务、实例管理、故障及它们对劳务业务模型和实现招的影响。

经以大半个点的任务分解为一些基本的因素,如消息传递、认证与授权,就可以揭开面向服务安全神秘的面纱。本章演示了安呢局域网和互联网应用程序等主要场景提供安全保障。最后,你可见见自己哉声明式的WCF安全所修的框架,设计吧活动实现安康的设置,从而极大地简化对平安之治本。

第6章,错误

第1章,WCF基础

本书使读者是平等称呼经验丰富的开发者,熟悉诸如封装与持续等面向对象的定义。我会用读者现有的针对性目标以及零部件技术以及术语的体会,巩固对WCF知识的问询。读者应当对于.NET以及C#
2.0之基础知识(包括泛型与匿名方式)有着鲜明的刺探。虽然本书大部分情以的是C#语言,然而对于Visual
Basic 2005底开发者而言,仍然有所参考价值。

当过去之一定量年被,我于MSDN杂志及上了大量关于WCF的篇章。目前,我还以吗杂志的基础专栏(Foundations
Column)撰写WCF技术文章。我要是谢谢杂志社能够允许自己拿这些文章引用到本书中。如果您曾读书了这些文章,或许能够从本书的相干章节中发现她的阴影。比较而言,本书的节更加完善,提供了WCF的强意、技术以及实例,而且这些主题也同书被的外章节紧密连。

Safari提供了千篇一律模仿优于电子书籍的缓解方案。它是一个虚拟图书馆,读者通过它可以方便地搜索到数千随顶尖的艺书籍,剪切和糊代码实例,下充斥书中之段,搜寻你所待的双重详实、更规范之音。赶快走吧,体验就当http://safari.oreilly.com。

自动用以花括弧内加点的样式,表示中省略了必需但非需指定的代码:

究竟是哪一样栽服务实例处理啊一样种植客户端的请求?本章给来了问题之匙。WCF支持多劳务实例管理、激活以及生命周期管理技术,这些技能同网规模以及特性息息相关。本章给有了每一样种植实例管理模式之间的涉,指导读者何时以及哪有效地利用它们。本章还介绍及之休戚相关的主题,例如限流(Throttling)。

用来代码中之重点片

及了2003年7月,我产生时机体验了一个崭新的事务型体系架构,它亦可改善.NET编程中有关事务处理的系缺陷。当时,并不曾一个平静的编程模型能够联合那些单身的技术。直到2003年最终,我幸运得到约出席一个是因为同行专家组成的微型团,对代号为Indigo的支出平台开展战略的规划评审。就自我所理解,这个开团队可谓人才济济,汇聚了过多世界上无限精美之天赋。在联网下去的2-3年时外,Indigo一共经历了三替编程模型版本的演变。就在2005年早期发布了依据终结点驱动对象模型的本之后,终于于是年8月慢慢稳定与否一个一定的版本,同时更名为Windows
Communication Foundation(WCF)。

否清起见,实例代码通常并无含有using语句指定示例必须的命名空间,只有在前文中介绍至的初的命名空间,才会包含在实例代码中。

使想赢得开发者的众口称赞,可谓难于上青天,然而WCF却于了咱歧之诠释。对于Web服务的开发者而言,WCF就是最终之应互操作性的缓解方案,实现了多数行业规范。分布式应用程序的开发者则以为她简化了长途调用以及队列调用。系统开发者认为其富有下一代面向产品之特征,诸如事务和宿主,为应用程序提供了成的根底功能模块。至于应用程序的开发者,WCF则为他们构建应用程序提供了声明式的编程模型。而对此架构师,WCF则是构建面向服务应用程序的末梢摘取。一开口为敝之,WCF涵盖了以上有的整个,因为设计WCF的目的就是以能够合并微软的后进全新的技巧。

public class SomeClass
{
  int m_Number;

提拔:该图标标示着附近的公文非常重要。

本章全面介绍了劳务将错误以及坏返回给客户端的方法,毕竟,诸如好及充分处理的构建都是均等宗一定的技艺,无法通过服务边界。本章介绍了错误处理的特等实践,使开发者能够排除客户端错误处理与劳动之耦合度。本章还以身作则了何等扩大及改进WCF基础的错误处理机制。

如何联系我们

读者是否注意到在公欢喜的技巧书籍的封底上,有一个Safari®
Enabled图标。它代表本书由O’Reilly Network Safari
Bookshelf资了在线的可用版本。

第8章,并作管理

第5章,操作

第9节,队列服务

第7章,事务

本书推荐的命名规范和编码样式可以瞻仰拙著《.NET组件编程(O’Reilly)》附录E中之情节。如果开被代码背离了立即无异于正经,是为受到了空格或代码行长度的限。至于命名约定,我利用“Pascal
casing”为国有成员方法及性命名,即名的每个单词首配母要大写。至于当地变量和方式参数,则以“camel
casing”方式,即名被的首先独单词首假名不要大写。对于个人成员,我会在变量名前加上前缀m_:

WCF提供了相同种植强大然而精炼的扬言方式,用来管理客户端和劳务的产出与一同。本章展现了累累尖端技术,例如回调、重入(Reentrancy)、线程关联度(Thread
Affinity)、同步上下文(Synchronization
Context)以及避免死锁的顶尖实践及标准。

致谢

自我在每一样段中都系地教了一个专题,深入探讨了这些专题的始末。然而,每一样章而还凭借让前一样节的情节,因此,我建议乃尽好以先后顺序阅读本书。

用于技术术语、在线链接和文件名

附录A,面向服务概述

假若无实际存在的只是共享的数据类型本身,如果没有运用同样的开发技术,我们该怎么样处理客户端与劳动期间的数据交换?在本章,你得见见什么处理某些有趣的有血有肉题材,例如数据版本控制,以及传递元素项集合的章程。

对本书,如果产生任何看法或者问题,请按以下地方联系本书出版商: