积极答复者
关于wcf中的回调方法和接口方法的疑问?

问题
答案
-
1. [OperationContract(IsOneWay = true)] //取得任务 ,应答式,
void getTask(Task task);
{
[OperationContract]
bool SendTask(Task task);
}
3. [OperationContract]List<Image> GetImageAndTaskXml(string imageid); //取得图像对象列表,Image为一个对象
//客户端 reference.cs
public InputTest.Test.Image[] GetImageAndTaskXml(string imageid) {
return base.Channel.GetImageAndTaskXml(imageid);
}上面是2种不同的方式,一种是应答式,需要回调, 另一种是返回对象列表方法。
问题:这2种方式都会得到对象,怎么选?
上面的场景是否没必要回调?
你上面这3个例子代码我看了有问题。
1.定义的是One way,也就是单向调用,不熟请求/应答模式,你调用后就不管了,服务端不会发回结果。
2.定义的是个回调契约,这个应该在服务端回调操作上使用,这个回调方法的实现在客户端,也就是客户端回调的时候,希望客户端执行的代码。做些工作。
3. List<Image> GetImageAndTaskXml(string imageid); 这个才是
请求/应答模式。客户端请求,服务端发回处理结果。你如果仅仅是单纯的客户端请求调用服务,处理一些结果,那么不需要使用回调。比如仅仅是获取图片列表什么的。
这是很简单的情况。
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
- 已标记为答案 Mog Liang 2010年12月27日 9:49
全部回复
-
不一样。
回调接口方法,你可以看下,必须是Void 而且是OneWay的,也就是单向操作。这个不需要发回处理结果。也就是发送后不管。
普通的操作方法,定义的时候,默认是 请求/应答模式。也就是客户端调用,服务端处理请求,最后发回处理结果给客户端。
两者处理的问题场景不同。请求/应答模式,是最常见的消息交换模式。包括我们浏览网页。
而回调,也叫双工通信,双工消息交换模式,这个运行,客户端和服务端同时向彼此发送消息。
WCF里的回调,也是在服务端处理完请求后,如果要调用客户端的某些方法的时候,才需要使用。
比如,服务端处理时间很久,但是我想处理结束的时候,通知客户端保存个状态什么的。
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
-
[OperationContract(IsOneWay = true)] //取得任务 ,应答式,
void getTask(Task task);
{
[OperationContract]
bool SendTask(Task task);
}
[OperationContract]List<Image> GetImageAndTaskXml(string imageid); //取得图像对象列表,Image为一个对象
//客户端 reference.cs
public InputTest.Test.Image[] GetImageAndTaskXml(string imageid) {
return base.Channel.GetImageAndTaskXml(imageid);
}上面是2种不同的方式,一种是应答式,需要回调, 另一种是返回对象列表方法。
问题:这2种方式都会得到对象,怎么选?
上面的场景是否没必要回调?
-
1. [OperationContract(IsOneWay = true)] //取得任务 ,应答式,
void getTask(Task task);
{
[OperationContract]
bool SendTask(Task task);
}
3. [OperationContract]List<Image> GetImageAndTaskXml(string imageid); //取得图像对象列表,Image为一个对象
//客户端 reference.cs
public InputTest.Test.Image[] GetImageAndTaskXml(string imageid) {
return base.Channel.GetImageAndTaskXml(imageid);
}上面是2种不同的方式,一种是应答式,需要回调, 另一种是返回对象列表方法。
问题:这2种方式都会得到对象,怎么选?
上面的场景是否没必要回调?
你上面这3个例子代码我看了有问题。
1.定义的是One way,也就是单向调用,不熟请求/应答模式,你调用后就不管了,服务端不会发回结果。
2.定义的是个回调契约,这个应该在服务端回调操作上使用,这个回调方法的实现在客户端,也就是客户端回调的时候,希望客户端执行的代码。做些工作。
3. List<Image> GetImageAndTaskXml(string imageid); 这个才是
请求/应答模式。客户端请求,服务端发回处理结果。你如果仅仅是单纯的客户端请求调用服务,处理一些结果,那么不需要使用回调。比如仅仅是获取图片列表什么的。
这是很简单的情况。
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
- 已标记为答案 Mog Liang 2010年12月27日 9:49