none
关于wcf中的回调方法和接口方法的疑问? RRS feed

  • 问题

  • wcf服务中接口方法可以返回一个对象,回调也是发送一个对象,感觉不用回调方法,接口方法直接返回对象也可以用。

    疑问:二者之间有何不同?在实际中该如何使用?

    2010年12月20日 1:19

答案

  •        

          1. [OperationContract(IsOneWay = true)]  //取得任务 ,应答式,
            void getTask(Task task);

     

           2.public interface ITaskCallback   //回调方法
           {
              [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/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    • 已标记为答案 Mog Liang 2010年12月27日 9:49
    2010年12月22日 1:42
    版主

全部回复

  • 不一样。

    回调接口方法,你可以看下,必须是Void 而且是OneWay的,也就是单向操作。这个不需要发回处理结果。也就是发送后不管。

    普通的操作方法,定义的时候,默认是 请求/应答模式。也就是客户端调用,服务端处理请求,最后发回处理结果给客户端。

     

    两者处理的问题场景不同。请求/应答模式,是最常见的消息交换模式。包括我们浏览网页。

    而回调,也叫双工通信,双工消息交换模式,这个运行,客户端和服务端同时向彼此发送消息。

    WCF里的回调,也是在服务端处理完请求后,如果要调用客户端的某些方法的时候,才需要使用。

    比如,服务端处理时间很久,但是我想处理结束的时候,通知客户端保存个状态什么的。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2010年12月20日 4:45
    版主
  •        

           [OperationContract(IsOneWay = true)]  //取得任务 ,应答式,
            void getTask(Task task);

     

           public interface ITaskCallback   //回调方法
           {
              [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种方式都会得到对象,怎么选?

           上面的场景是否没必要回调?

          

     

          

          

    2010年12月20日 6:26
  •        

          1. [OperationContract(IsOneWay = true)]  //取得任务 ,应答式,
            void getTask(Task task);

     

           2.public interface ITaskCallback   //回调方法
           {
              [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/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    • 已标记为答案 Mog Liang 2010年12月27日 9:49
    2010年12月22日 1:42
    版主