silverlight3 学习 4.2 简谈WCF编程
什么是WCF?
WCF 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。终结点可以是从服务终结点请求数据的服务客户端。简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数据流。
如何开发WCF?
开发一个WCF服务,需要完成以下5个任务
1. 设计服务协定。
2. 实现服务协定。
3. 配置服务。
4. 承载服务。
一、 设计服务协定
(1) 如何设计服务协定呢?
协定其实是指服务所支持的操作。通过定义接口可以创建协定,接口中的方法对应特定的服务操作。每个接口都必须具有ServiceContractAttribute 属性标记,而接口中的方法必须至少拥有一个用 OperationContractAttribute 属性标记的方法.。
ServiceContractAttribute 属性简单介绍:
ConfigurationName 属性获取或设置用于查找应用程序配置文件中的服务的名称。
Name 属性获取或设置 Web 服务描述语言 (WSDL) 中的<portType>元素的名称。
Namespace属性获取或设置 Web 服务描述语言 (WSDL) 中的<portType>元素的命名空间。
SessionMode属性指定协定是否需要支持会话的绑定。
CallbackContract属性指定双向(双工)对话中的返回协定。
HasProtectionLevel和 ProtectionLevel 属性指示是否所有支持协定的消息都具有一个显式 ProtectionLevel值,如果有,处于什么级别。
创建协定
[ServiceContract]
public interface IMyCalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
(2) 协定中操作的参数和返回值映射到消息交换三种模式:请求/答复、单向和双工消息模式
请求-答复模式是 WCF中操作协定的默认类型。客户端调用服务操作并等待服务的响应。若要创建请求-答复服务协定,请定义服务协定,然后对每个操作应用 OperationContractAttribute 类,如下面的示例代码所示。
[OperationContract]
double Add(double n1, double n2);
单向模式是指客户端调用服务操作不必等待操作完成。也说是说服务中的操作返回值是void; 只要将返回为void的操作添加 IsOneWay=true,则表示此操作为单向消息交换。如下面的示例所示。
[OperationContractAttribute(IsOneWay=true)]
void Hello(string greeting);
双工模式允许服务通过回调与客户端进行通信, 这样服务和客户端都可以启动对另一方的呼叫。而双工协定是由客户端和服务器之间的两个单向协定组成
简单的说双工模式是由两个接口实现, 通过将主接口中的 CallbackContract 属性设置为回调接口的类型,将两个接口链接到一个双工协定中。
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", CallbackContract=typeof(ICalculatorDuplexCallback))]
public interface ICalculatorDuplex
{
…
}
public interface ICalculatorDuplexCallback
{
…
}
二、实现服务协定
要实现服务协定,需要创建一个实现协定接口的类。(也可以直接通过将 ServiceContractAttribute 属性应用在一个类本身而实现服务,但是不提倡这种做法)
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
}
public class CalculatorService : ICalculator
{
public double Add(double n1, double n2)
{
return n1 + n2;
}
}
三、配置服务
配置服务包括服务的绑定,服务的终结点。
绑定可指定在与终结点通话时所使用的通信机制,并指示如何连接到终结点。绑定包含以下元素:
l 协议堆栈确定用于发送到终结点的消息的安全性、可靠性和上下文流设置。
l 传输确定将消息发送到终结点时使用的基础传输协议,例如 TCP 或 HTTP。
l 编码确定用于发送到终结点的消息的网络编码,例如,文本/XML、二进制或消息传输优化机制 (MTOM)。
WCF提供了多种绑定机制,也可以创建自己的绑定。
终结点的结构:地址,绑定,服务协定。
添加终结点:
WSHttpBinding binding = new WSHttpBinding();
serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "CalculatorService");
四、承载服务
WCF在运行的时候必须自己提供宿主来承载服务。WCF 本身没有附带宿主,而是提供了一个 ServiceHost 的类,该类允许您在自己的应用程序中host WCF 服务。然后调用 ServiceHost 的 Open 方法即可。我们知道WCF是针对SOA的一套技术.对于SOA而言,我们必须确保服务能够正常运行,平稳的运行,所以此时如何host我们的服务,用什么 来Host我们的服务是很重要的,所以我们要为我们的应用程序选择一个合适的Host方式是很有必要的.