1.定义两个接口
//客户端调用
//回调接口,服务器调用客户端代码,这个接口由客户端实现
2.服务器实现接口
3,客户端添加服务引用,实现callback接口
4.调用
//客户端调用
[ServiceContract(CallbackContract = typeof(IContractCallback))]
public interface IContract
{
[OperationContract(IsOneWay = true)]
void Foo(DataMember dt);
}
//回调接口,服务器调用客户端代码,这个接口由客户端实现
[ServiceContract]
public interface IContractCallback
{
[OperationContract(IsOneWay = true)]
void OnFooCallback();
}
2.服务器实现接口
[DataContract]
public class DataMember
{
[DataMember(IsRequired = true)]
public int Id;
[DataMember(IsRequired = true)]
public string Name;
}
public class Service2 : IContract
{
[OperationBehavior(TransactionScopeRequired=true)]
public void Foo(DataMember dt)
{
//do something
//...
//call back,调用客户端的实现
var callback = OperationContext.Current.GetCallbackChannel<IContractCallback>();
callback.OnFooCallback();
}
}
3,客户端添加服务引用,实现callback接口
class MyCallback : IContractCallback
{
public void OnFooCallback()
{
Console.WriteLine("call back from server");
}
}
4.调用
var instance = new MyCallback();
InstanceContext instanceContext = new InstanceContext(instance);
ServiceReference2.ContractClient client = new ServiceReference2.ContractClient(instanceContext);
client.Open();
client.Foo(new ServiceReference2.DataMember() { Id = 1, Name = "111" });
Thread.Sleep(2000);//之所以休眠2s再关闭连接是等待服务器回调结束
client.Close();
Console.ReadKey();