双向通讯是这样的一种机制,就是服务端与客户端的身份是可换的,服务示例可以回调客户端的操作,当一个服务契约被定义在服务端的时候,有时候我们的业务逻辑要求我门进行相应的回调操作。标准的服务契约定义了能够被客户端调用的服务操作。回调契约定义了能够被服务端调用的客户端操作。因此,客户端必须具有实现回调契约的义务和宿主回调对象的能力。每当客户端调用具有回调操作的服务端示例操作的时候,客户端必须提供足够的信息以使服务端能够寻址到客户端并执行相应的回调操作。[引用]
接下来我们就来做这样的一个场景,这个场景也是从网上看的。WCF服务端提供一个加法的服务,客户端调用服务端的服务之后,服务端回调客户端的显示方法最后将结果显示在客户端界面。下面是运行的效果,源码在此下载
在WCF的默认的绑定中WSDualHttpBinding是一个安全且可互操作的绑定。适用于双工服务协定或通过 SOAP 媒介进行的通信。本示例就是基于此绑定来实现的。为在编程中多应用些WCF编程的技术,服务端采用代码来创建服务端承载。
第一步 创建标准契约和回调契约
回调契约,用于在客户端显示结果信息
[ServiceContract(Namespace="http://www,cbcye.com/wcf/Callback/)]
public interface ICalculatorCallback
{
[OperationContract]
void ShowResult(double x, double y, double result);
}
标准契约,声明了回调契约的类型
[ServiceContract(CallbackContract = typeof(ICalculatorCallback))]
public interface IDuplexCalculator
{
[OperationContract]
void Add(double x, double y);
}
第二步 在服务端实现标准契约
第六步 客户端调用