• 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);
             }
         }
     }
  • 相关阅读:
    Async、Await
    CommandLineParser命令行解析类
    Dispose in c#
    授权oAuth
    Hadoop技术内幕1——源代码环境准备
    postgreSql——时区问题
    Linux命令3——c
    Linux命令2——b
    Linux命令1——a
    hadoop的Linux操作
  • 原文地址:https://www.cnblogs.com/w2011/p/2746370.html
Copyright © 2020-2023  润新知