当许多人在一条路上徘徊不前时,他们不得不让开一条大路,让那珍惜时间的人赶到他们的前面去。——苏格拉底(上海网站建设)
跟我一路从零开端学WCF(1)——WCF概述
Admin
2012年1月21日
本系列课程来自WebCast
作者:徐长龙
MSDN特邀讲师
vsts_china@hotmail.com
收听本次课程需具备的前提收听本次课程需具备的前提
* 熟悉Web Service编程
* 熟悉Visual Studio 2005/2008
* 熟悉分布式应用法度开辟
创建办事和谈—WCF术语
>>消息
–消息是一个自力的数据单位,它可能由几个项目组构成,包含消息
正文和消息头。
>>办事
–办事是一个机关,它公开一个或多个终结点,此中每个终结点都
公开一个或多个办事操纵。
>>终结点
–终结点是用来发送或接管消息(或履行这两种操纵)的机关。终
结点包含个定义消息可以发送到的目标地的地位(地址)结点包含一个定义消息可以发送到的目标地的地位(地址)、一个描述消息应如何发送的通信机制规范(绑定)以及对于可以在该地位发送或接管(或两者皆可)的一组消息的定义(办事和谈)—该定义还描述了可以发送何种消息。
–WCF 办事作为一个终结点凑集向外界公开。
·类或接口都可以定义办事和谈
·建议应用接口,因为接口可以直接对办事和谈建模
·办事和谈接口具有托管接口的所有长处:
–办事和谈接口可以扩大任何数量的其他办事和谈接口。
–一个类可以经由过程实现办事和谈接口来实现随便率性数量的办事和谈。
–可以经由过程更改接话柄现来批改办事和谈的实现,而让办事和谈保
持不变。
–可以经由过程实现旧接口和新接口来断定办事的版本。老客户端连接
到原始版本,而新客户端则可以连接到较新的版本。
·定义办事和谈
–在类或接口上应用ServiceContractAttribute 属性标识表记标帜
·定义办事操纵
–在办法上应用OperationContractAttribute 属性对其进行标识表记标帜
·参数和返回值
每个操纵都有一个返回值和一个参数即使它们为void 可以使–每个操纵都有一个返回值和一个参数,即使它们为void 。可以应用局部办法将对对象的引用从一个对象传递到另一个对象,但与局部办法不合的是,办事操纵不会传递对对象的引用,它们传递的只是对象的副本。
–这一点很首要,这是因为参数或返回值中应用的每个类型都必须是可序列化的,换言之,该类型的对象必须可以或许转换为字节俭,是可序列化的,换言之,该类型的对象必须可以或许转换为字节俭,并可以或许从字节俭转换为对象。
–默认景象下,基元类型是可序列化的,.NET Framework 中的很多类型都是可序列化的。
办事操纵的消息模式
>>恳求/答复
–经由过程恳求/ 答复模式,恳求发送方(客户端应用法度)将接管与恳求相干的答复。这是默认的模式,因为它既支撑传入操纵(一个或多个参数传递到该操纵中),也支撑返回操纵(该操纵将一个或多个参数传递到该操纵中支撑返回操纵该操纵将个或多个输出值传回给调用方)
[ OperationContract ]
string Hello(string greeting);
–请重视,除非指定其他根蒂根基消息模式,不然,即使办事操纵返回void (在Visual Basic 中为Nothing),也属于恳求/ 答复消息互换。
–操纵的成果是:除非客户端异步调用操纵,不然客户端将停止处理惩罚,直到收到返回消息,即使该消息正常景象下为空时也是如此。
·毛病
–若是履行操纵须要很长的时候,则会降落客户端机能和响应才能
·长处
–响应消息中可返回SOAP错误,这注解可能在通信或处理惩罚中产生了一些与办事有关的错误状况
>>单向
–若是WCF 办事应用法度的客户端不必守候操纵完成,并且不处理惩罚SOAP 错误,则该操纵可以指定单向消息模式。
–单向操纵是客户端调用操纵并在WCF将消息写入收集后持续进单向操纵是客户端调用操纵并在WCF 将消息写入收集后持续进行处理惩罚的操纵。凡是这意味着,除非在出站消息中发送的数据极其重大,不然客户端几乎立即持续运行(除非发送数据时失足)。
此种类型的消息互换模式支撑从客户端到办事应用法度的类似于事务的行动。
–若要为返回void 的操纵指定单向消息互换,请将IsOneWay 属性设置为true ,默认为false.
[OtiCtt(IOWt)][OperationContract (IsOneWay=true)]
void Hello(string greeting);
·此办法与前面的恳求/答复示例雷同,然则,将IsOneWay属性设置为true 意味着尽管办法雷同,办事操纵也不会发送返回消息,而客户端将在出站消息抵达通道层时立即返回
>>双工
–双工模式的特点是,无论应用单向消息发归还是恳求/ 答复消息发送体式格式,办事和客户端均可以或许自力地向对方发送消息。对于必须直接与客户端通信或向消息互换的随便率性一方供给异步体验(包含类似于事务的行动)的办事来说,这种双向通信情势很是有效
–因为存在与客户端通信的附加机制,双向模式比恳求/ 答复或单向
模式要略为错杂
–若要设计双工和谈,还必须设计回调和谈,并将该回调和谈的类型分派给标识表记标帜办事和谈的ServiceContractAttribute 属性(attribute)的CallbackContract属性(property) 。
–若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的办法声明
[ServiceContract(Namespace ="http://Microsoft.ServiceModel.Samples",
SessionMode=SessionMode.Required,
CallbackContract=typeof(ICalculatorDuplexCallback))]
public interface ICalculatorDuplex
{
[OperationContract(IsOneWay = true)]
void Clear();
}
public interface ICalculatorDuplexCallback
{
[OperationContract(IsOneWay = true)]
void Equals(double result);
[ OperationContract ( IsOneWay =true)] [OperationContract ( IsOneWay = true)]
void Equation(string eqn);
}
演示1
创建不合消息模式的WCF办事
1恳求/ 答复,2 单向,3 双工
创建数据和谈创建数据和谈
·面向办事的应用法度(例如Windows Communication Foundation
(WCF) 应用法度)设计为与Microsoft平台和非Microsoft平台上的 (WCF)应用法度)设计为与Microsoft平台和非Microsoft 平台上的
最大可能数量的客户端应用法度进行互操纵。
·为了获得最大可能的互操纵性,建议您应用DataContractAttribute 和DataMemberAttribute 属性对您的类型进行标识表记标帜,以创建数据和谈。
·数据和谈是办事和谈的一项目组用于描述您的办事操纵互换的数据
创建数据和谈
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[ DataMember]
public boolBoolValue
{
get { return boolValue; }
set {boolValue = value; }
}
}
创建数据和谈
·数据和谈是可选的样式和谈:除非您显式应用数据和谈属性,不然不会序列化任何类型或数据成员
·数据和谈与托管代码的接见局限无关:可以对私稀有据成员进行序列数据和谈与托管代码的接见局限无关可以对私稀有据成员进行序列化,并将其发送到其他地位,以便可以公开接见它们
· WCF处理惩罚用于启用操纵功能的根蒂根基SOAP消息的定义,并处理惩罚数据类型到消息正文的序列化和从消息正文进行的反序列化。数据类型一旦序列化,您就无需在设计操纵时推敲根蒂根基消息互换根蒂根基布局
·可以应用其他序列化机制。标准ISerializable, SerializableAttribute和IXmlSerializable 机制都可用于处理惩罚数据类型到根蒂根基SOAP 消息的和IXmlSerializable 机制都可用于处理惩罚数据类型到根蒂根基SOAP消息的序列化,这些消息可将数据类型从一个应用法度带到另一个应用法度
演示2
创建数据和谈
Out和Ref参数 Out和Ref参数
·大项目组景象下,您可以应用in 参数(Visual Basic 中为ByVal)、out 和ref 参数(VisualBasic 中为ByRef )。因为out 和ref 参数都指导数据是从操纵返回的,类似如下的操纵签名会指定须要恳求/ 答复操纵,即使操纵签名返回void 也是如此
[ServiceContract]
public interface IMyContract
{
[OperationContract]
void PopulateData( ref CustomDataTypedata);
}
·应用out或ref参数请求操纵具有根蒂根基响应消息,才可以将已批改的对象传回。若是操纵是单向操纵,则将在运行时激发InvalidOperationException 异常 作者:王雄飞(当冬夜渐暖)
出处:http://www.cnblogs.com/ynbt/
关于作者:专注于.Net、Windows Phone 7和移动互联网开辟。
本文版权归作者和博客园共有,迎接转载,但未经作者赞成必须保存此段声明,且在文章页面明显地位给出原文连接,如有题目,可以经由过程ynbt_wang@163.com接洽我,很是感激。 。
|