您的位置:首页 > 其它

WCF duplex 简单实例

2012-10-29 19:58 204 查看
1.定义两个接口

//客户端调用
[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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: