WCF duplex 簡單例項
阿新 • • 發佈:2019-02-01
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();