WCF实现双工通讯及客户端调用

新建一个Windows窗体应用程序(即客户端Client)和一个WCF服务库(WCF双工)

在WCF双工项目下:

新建一歌ILogger接口和实现该接口的Logger类

在ILogger接口中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WCF双工
{
    ///


    /// 1 将接口标记成一个双工通讯接口
    /// CallbackContract:回调的接口
    ///

    [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IResult))]
    public interface ILogger
    {
        ///
        /// 3 此方法也必须是一个数据报的方法
        ///

        ///
        [OperationContract(IsOneWay = true)]
        void WriteLog(string logtxt);
    }
    ///
    /// 2 接口的名称可以由程序员自行定义
    ///

    public interface IResult
    {
        ///
        /// 2.1 特点:此方法必须是一个数据报的方法
        ///

        ///
        [OperationContract(IsOneWay = true)]
        void WriteResult(string msg);
    }

}

需要注意:将接口标记为一个双工通讯接口,即添加[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IResult))]

其中IResult接口是为了实现双工通讯,该接口下的方法需要将特性设置为数据报的方法

Logger类中

using System.Diagnostics;
using System.ServiceModel;
namespace WCF双工
{
    public class Logger : ILogger
    {
        IResult iresult;
        ///


        /// 4.0 构造函数中接收在客户端实现了IResult的子类的对象实例
        ///

        public Logger()
        {
            //获取了客户端的IResult的具体实现类的对象实例
            //OperationContext当前执行方法的上下文
            //GetCallbackChannel执行当前回调的管道
            iresult = OperationContext.Current.GetCallbackChannel();

        }

        //给客户端的调用的方法,需要等待休眠时间结束才返回,但线程不被影响

        public void WriteLog(string logtxt)
        {
            //1.0 接收到数据以后需要5秒钟才能处理完成
            Stopwatch stop = new Stopwatch();
            stop.Start();
            System.Threading.Thread.Sleep(5000);
            stop.Stop();
            //2.0 通过回调客户端的函数将处理结果响应给客户端
            iresult.WriteResult("您的请求已经处理成功,耗时" + stop.Elapsed.Seconds + "秒钟");
        }
    }

}

注意:Logger构造函数接收在客户端实现了IResult的子类的对象实例,调用当前操作的客户端实例的管道

修改配置文件

WCF实现双工通讯及客户端调用_第1张图片

在Client中

添加对WCF服务的引用

WCF实现双工通讯及客户端调用_第2张图片

WCF实现双工通讯及客户端调用_第3张图片


WCF实现双工通讯及客户端调用_第4张图片

先启动WCF服务,在启动Client程序,结果视图如下

WCF实现双工通讯及客户端调用_第5张图片




你可能感兴趣的:(Asp)