WCF - Windows Communication Foundation 提供了安全的、可靠的、事务服务的同意框架,正和扩展了分布式系统的开发技术。
WCF服务具有重用性、注重效率、松耦合、职责划分等优点。WCF中的服务可以是本地的,也可以使用远程的服务。对于客户端而言,客户端只需要通过使用服务来实现应用程序功能,这些客户端可以是不同类型。对于客户端而言,客户端是听过使用消息与服务器进行通信。
1)在WCF中,所有的WCF服务都会被公开成为契约。契约是服务的功能的标准描述方式,通常情况下WCF包含四种类型的契约,这些契约如下所示。
服务契约(Service Contract):服务契约定义了客户端能够执行的操作,服务契约是WCF中使用最为广泛的一种契约。
数据契约(Data Contract):数据契约定义了客户端与服务器之间交互的数据类型。
错误契约(Fault Contract):错误契约定义了操作中出现的异常,包括定义服务出现的错误并传递返回给客户端。
消息契约(Message Contract):消息契约允许服务直接与消息交互,但是WCF很少使消息契约。
也就是说当你想调用WCF上的契约方法时候必须使用ServiceContractAttribute标识服务契约,而使用OperationContractAttribute标识服务方法
例如:这里要注意的是[ServiceContract]表示服务卸载接口之上;[OperationContract]写在该接口内的方法声明上。如果不写该声明则在其他项目中无法调用该服务。
[ServiceContract] //标识服务契约
public interface IService1 //实现接口
{
[OperationContract] //方法声明
string GetData(int value); //创建方法
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// 任务: 在此处添加服务操作
}
2) 使用[DataContract]写在用于上面方法中返回值的类之上,[DataMember]写在该类中属性之上。由于上面GetDataUsingDataContract方法的返回值的类型为CompositeType类,而该类是我们自己写的类,所以需要使用DataContract来描述,否则在其他项目中调用GetDataUsingDataContract时,不会有返回值。
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
3) 客户端与服务器之间是通过消息进行通信的,通过使用消息,客户端和服务器至今能够通过使用消息交换来实现方法的调用和数据传递。
1. Request/Replay 默认的消息传递模式,无需在声明时添加其声明模式;该模式调用服务器的方法后需要等待服务器的消息返回,从而获得服务器返回的值。
2. One-way消息传递模式,使用One-way模式定义的方法,该方法可以立刻被调用后立即返回。但One-Way模式修饰的方法必须是void的方法。所谓的One-Way指的就是从客户端到服务器端这样一条单一的消息发送模式。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
int GetSum(DateTime time);
[OperationContract]
string GetShopInformation(string address);
[OperationContract(IsOneWay=true)]
void OutputString();
}