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);
         }
     }
 }

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值