zoukankan      html  css  js  c++  java
  • WCF 双工的学习

    初学WCF。。。。

    服务端:

    服务契约:
       [ServiceContract(Namespace ="http://serverModel.Samples",SessionMode =SessionMode.Required,
             CallbackContract = typeof(ICalcualtorDuplexCallBack))]
         public interface IService2
         {
            [OperationContract(IsOneWay = true)]
             void Clear();
     
            [OperationContract(IsOneWay = true)]
             void Add(double input);
     
             [OperationContract(IsOneWay = true)]
            void Subtraction(double input);
     
             [OperationContract(IsOneWay = true)]
             void Multiplication(double input);
     
             [OperationContract(IsOneWay =true)]
             void Addition(double input);
     
         }
     
         /// <summary>
         /// 回调
         /// </summary>
         public interface ICalcualtorDuplexCallBack
         {
             [OperationContract(IsOneWay = true)]
             void Equals(double result);
     
             [OperationContract(IsOneWay = true)]
             void Equation(string eqn);
         }
    
    

    服务部分:

     1   public class Service2 : IService2
     2      {
     3          private double _result;
     4          private string _equation;
     5          private ICalcualtorDuplexCallBack _callback = null;
     6          public Service2()
     7          {
     8              _result = 0.0D;
     9              _equation = _result.ToString(CultureInfo.InvariantCulture);
    10              //获得Callback回调的公告
    11              _callback = OperationContext.Current.GetCallbackChannel<ICalcualtorDuplexCallBack>();
    12          }
    13          /// <summary>
    14          /// 清除
    15          /// </summary>
    16          public void Clear()
    17          {
    18              _callback.Equation(_equation+"="+_result.ToString(CultureInfo.InvariantCulture));
    19              _result = 0.0D;
    20              _equation = _result.ToString(CultureInfo.InvariantCulture);
    21          }
    22          /// <summary>
    23          /// 增加
    24          /// </summary>
    25          /// <param name="input">参数</param>
    26          public void Add(double input)
    27          {
    28              _result += input;
    29              _equation += "+" + input.ToString(CultureInfo.InvariantCulture);
    30              _callback.Equals(_result);
    31          }
    32          /// <summary>
    33          ///34          /// </summary>
    35          /// <param name="input">参数</param>
    36          public void Subtraction(double input)
    37          {
    38              _result -= input;
    39              _equation += "-" + input.ToString(CultureInfo.InvariantCulture);
    40              _callback.Equals(_result);
    41          }
    42          /// <summary>
    43          ///44          /// </summary>
    45          /// <param name="input">参数</param>
    46          public void Multiplication(double input)
    47          {
    48              _result *= input;
    49              _equation += "*" + input.ToString(CultureInfo.InvariantCulture);
    50              _callback.Equals(_result);
    51  
    52          }
    53          /// <summary>
    54          ///55          /// </summary>
    56          /// <param name="input">参数</param>
    57          public void Addition(double input)
    58          {
    59              _result /= input;
    60              _equation += "*" + input.ToString(CultureInfo.InvariantCulture);
    61              _callback.Equals(_result);  
    62          }
    63  
    64  
    65      }

     配置文件:app.config

    在双工的时候 不支持 BasicHttpBinding,改wsDualHttpBinding 

     <service name="WcfServiceLibrary1.Service2">
             <!--双工不支持 BasicHttpBinding  所以在这里要用 wsDualHttpBinding -->
             <endpoint address="" binding="wsDualHttpBinding" contract="WcfServiceLibrary1.IService2">
               <identity>
                 <dns value="localhost" />
               </identity>
             </endpoint>
             <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
             <host>
               <baseAddresses>
                 <add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service2/" />
               </baseAddresses>
             </host>
           </service>

    客户端:

    客户端
       public partial class Window1 : Window,ServiceReference2.IService2Callback
         {
             public Window1()
             {
                 InitializeComponent();
             }
     
             private void button1_Click(object sender, RoutedEventArgs e)
             {
                 System.ServiceModel.InstanceContext instanceContext = new InstanceContext(this);
                 ServiceReference2.Service2Client clientw = new Service2Client(instanceContext);
                 double value = 2.0D;
                 clientw.Open();
                 clientw.Add(value);
                 clientw.Subtraction(value);
                 clientw.Multiplication(value);
                 clientw.Addition(value);
                 clientw.Clear();
                 clientw.Close();
          
             }
     
             public void Equals(double result)
             {
               //  MessageBox.Show("Result:"+result);
                 Console.WriteLine("Result:" + result);
             }
     
             public void Equation(string eqn)
             {
     
                 Console.WriteLine("Equation:" + eqn);
             }
         }
     }
  • 相关阅读:
    OnMeasureItem和OnDrawItem的区别和联系
    DockPanel 类
    C# 源码 AForge.NET
    ystem.Windows.Forms.SplitContainer : ContainerControl, ISupportInitialize
    System.Windows.Forms.Control : Component, IOleControl, IOleObject, IOleInPlaceObject, IOleInPlaceActiveObject....
    System.ComponentModel.Component : MarshalByRefObject, IComponent, IDisposable
    System.Windows.Forms.ListView : Control
    vs2013 密钥_
    系统封装 EasyBoot如何将WIN7安装版提取到光盘
    系统封装 ES3使用方法
  • 原文地址:https://www.cnblogs.com/w2011/p/2746370.html
Copyright © 2011-2022 走看看