双工可以让客户服与服务端实现相互的通信

1、双工交互方式

      A、服务端定义回调接口

      B、服务端申明回调对象 

      C、客户端实现回调接口

      D、客户端将实现接口对象传到服务器端

      E、服务器端调用客户端代码


2、代码

服务端接口定义:
public interface ICalculatorDuplexCallback
{
[OperationContract(IsOneWay = true)]
void Equals(double result);
[OperationContract(IsOneWay = true)]
void Equation(string eqn);
}
在服务契约中申明回调接口,让客户端实现其接口
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples", SessionMode = SessionMode.Required,
CallbackContract = typeof(ICalculatorDuplexCallback))]


客户端实现接口:
public class CallbackHandler : ICalculatorDuplexCallback
{
public void Equals(double result)
{
Console.WriteLine("Result({0})", result);
}

public void Equation(string eqn)
{
Console.WriteLine("Equation({0})", eqn);
}
}

InstanceContext instanceContext = new InstanceContext(new CallbackHandler());


// Create a client
ServiceReference1.CalculatorDuplexClient client = new ServiceReference1.CalculatorDuplexClient(instanceContext);
服务器中调用该函数:
ICalculatorDuplexCallback callback = null;
callback = OperationContext.Current.GetCallbackChannel<ICalculatorDuplexCallback>();

public void AddTo(double n)
{
result += n;
equation += " + " + n.ToString();
callback.Equals(result);
}