zoukankan      html  css  js  c++  java
  • C# WCF的通信模式

    wcf 通信模式一般分为三种;
    1,请求/响应模式
    2,单工模式
    3,双工模式
    一,请求/响应模式
    请求/响应通信是指客户端向服务端发送消息后,服务端会向客户端发送响应。这也意味着在接收到服务的响应以前,客户端不会继续执行操作。
    缺点

      – 如果执行操作需要很长的时间,则会降低客户端性能和响应能力。

    优点

      – 响应消息中可返回SOAP 错误,这表明可能在通信或处理中发生了一些与服务有关的错误状况。

    例题:

    如,上上节所示。直接添加WCF服务应用程序

    二,单工模式

    单向通信应是指通信只在一个方向进行,即从客户端流向服务。服务不会发送响应,而客户端也不会期望会有响应。这种情况下,客户端发送消息,然后继续执行。

    若要为返回void 的操作指定单向消息交换,请将IsOneWay 属性设置为true,默认为false.

    [OperationContract(IsOneWay=true)] 方法不能带有返回值、引用参数、输出参数

    例题:就是将请求/响应模式例题上的方法改为 void()类型的,且客户端只是向服务端发送消息,服务器无消息返回给客户端,即从客户端看不出效果。

    缺点

    -看不出效果

    优点

    -响应速度快

    三,双工模式

    双工模式的特点是,无论使用单向消息发送还是请求/答复消息发送方式,服务和客户端均能够独立地向对方发送消息。对于必须直接与客户端通信或向消息交换的任意一方提供异步体验(包括类似于事件的行为)的服务来说,这种双向通信形式非常有用。

    – 若要设计双工协定,还必须设计回调协定,并将该回调协定的类型分配给标记服务协定的ServiceContractAttribute 属性(attribute)的CallbackContract 属性(property)。

    – 若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的方法声明

    差不多类似于两个单工模式合并

    例题:

    服务端(配置文件和引用不再重复)

     配置文件:略,如上节,配置文件部署形似。

    IService1.cs:

    [ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IServiceDuplexCallback))]//获取双工协定时回调的协定的类型
        public interface IService1
        {
            [OperationContract(IsOneWay = true)]
            void AddNumer(int x,int y);

        }

        public interface IServiceDuplexCallback  //CallbackContract回调客户端方法
        {
            [OperationContract(IsOneWay = true)]
            void Calculate(int result);
        }

    Service1.cs:

      [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]//指服务协定实现内置的行为,获取传入消息中调用的实例数
        public class Service1 : IService1
        {
            IServiceDuplexCallback callback
            {
                get { return OperationContext.Current.GetCallbackChannel<IServiceDuplexCallback>(); }//获取客户端的通道及上下文权限
            }
            public void AddNumer(int x, int y)
            {
                int z = x + y;
                callback.Calculate(z);
            }

    服务端:

    添加服务引用,命名为myService

    添加一个类CallbackHandler,用于向服务器流入方法

      public class CallbackHandler : myService.IService1Callback
        {
            public void Calculate(int result)
            {
              Console.WriteLine("结果为:" + result);
            }
        }

    program.cs

                InstanceContext ic = new InstanceContext(new CallbackHandler());//实现上下文切换,获取服务器的实例
                myService.Service1Client client = new wcfClient.myService.Service1Client(ic);
                client.AddNumer(3, 4);

     以上是个小例子,具体的完善在以后讲解半双工和全双工。

  • 相关阅读:
    硬盘分区、寻址和系统启动过程
    剑指offer---05---用栈实现队列
    剑指offer---05---用栈实现队列
    服务端提供的JSON数据接口与用户端接收解析JSON数据
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/anyihen/p/5557984.html
Copyright © 2011-2022 走看看