国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

WCF實(shí)現(xiàn)進(jìn)程間管道通信Demo分享

2020-01-24 00:22:32
字體:
供稿:網(wǎng)友

一、代碼結(jié)構(gòu):

二、數(shù)據(jù)實(shí)體類:

using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.Text;using System.Threading.Tasks;namespace DataStruct{ /// <summary> /// 測(cè)試數(shù)據(jù)實(shí)體類 /// </summary> [DataContract] public class TestData {  [DataMember]  public double X { get; set; }  [DataMember]  public double Y { get; set; } }}

三、服務(wù)端服務(wù)接口和實(shí)現(xiàn):

接口:

using System;using System.Collections.Generic;using System.Linq;using System.ServiceModel;using System.Text;using System.Threading.Tasks;using DataStruct;namespace WCFServer{ /// <summary> /// 服務(wù)接口 /// </summary> [ServiceContract] public interface IClientServer {  /// <summary>  /// 計(jì)算(測(cè)試方法)  /// </summary>  [OperationContract]  double Calculate(TestData data); }}

實(shí)現(xiàn):

using System;using System.Collections.Generic;using System.Linq;using System.ServiceModel;using System.Text;using System.Threading.Tasks;using DataStruct;namespace WCFServer{ /// <summary> /// 服務(wù)實(shí)現(xiàn) /// </summary> [ServiceBehavior()] public class ClientServer : IClientServer {  /// <summary>  /// 計(jì)算(測(cè)試方法)  /// </summary>  public double Calculate(TestData data)  {   return Math.Pow(data.X, data.Y);  } }}

四、服務(wù)端啟動(dòng)服務(wù):

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.ServiceModel;using System.ServiceModel.Description;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using Utils;using WCFServer;namespace 服務(wù)端{(lán) public partial class Form1 : Form {  public Form1()  {   InitializeComponent();  }  private void Form1_Load(object sender, EventArgs e)  {   BackWork.Run(() =>   {    OpenClientServer();   }, null, (ex) =>   {    MessageBox.Show(ex.Message);   });  }  /// <summary>  /// 啟動(dòng)服務(wù)  /// </summary>  private void OpenClientServer()  {   NetNamedPipeBinding wsHttp = new NetNamedPipeBinding();   wsHttp.MaxBufferPoolSize = 524288;   wsHttp.MaxReceivedMessageSize = 2147483647;   wsHttp.ReaderQuotas.MaxArrayLength = 6553600;   wsHttp.ReaderQuotas.MaxStringContentLength = 2147483647;   wsHttp.ReaderQuotas.MaxBytesPerRead = 6553600;   wsHttp.ReaderQuotas.MaxDepth = 6553600;   wsHttp.ReaderQuotas.MaxNameTableCharCount = 6553600;   wsHttp.CloseTimeout = new TimeSpan(0, 1, 0);   wsHttp.OpenTimeout = new TimeSpan(0, 1, 0);   wsHttp.ReceiveTimeout = new TimeSpan(0, 10, 0);   wsHttp.SendTimeout = new TimeSpan(0, 10, 0);   wsHttp.Security.Mode = NetNamedPipeSecurityMode.None;   Uri baseAddress = new Uri("net.pipe://localhost/pipeName1");   ServiceHost host = new ServiceHost(typeof(ClientServer), baseAddress);   ServiceMetadataBehavior smb = new ServiceMetadataBehavior();   host.Description.Behaviors.Add(smb);   ServiceBehaviorAttribute sba = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();   sba.MaxItemsInObjectGraph = 2147483647;   host.AddServiceEndpoint(typeof(IClientServer), wsHttp, "");   host.Open();  } }}

五、客戶端數(shù)據(jù)實(shí)體類和服務(wù)接口類與服務(wù)端相同

六、客戶端服務(wù)實(shí)現(xiàn):

using DataStruct;using System;using System.Collections.Generic;using System.Linq;using System.ServiceModel;using System.ServiceModel.Description;using System.Text;using System.Threading.Tasks;using WCFServer;namespace DataService{ /// <summary> /// 服務(wù)實(shí)現(xiàn) /// </summary> public class ClientServer : IClientServer {  ChannelFactory<IClientServer> channelFactory;  IClientServer proxy;  public ClientServer()  {   CreateChannel();  }  /// <summary>  /// 創(chuàng)建連接客戶終端WCF服務(wù)的通道  /// </summary>  public void CreateChannel()  {   string url = "net.pipe://localhost/pipeName1";   NetNamedPipeBinding wsHttp = new NetNamedPipeBinding();   wsHttp.MaxBufferPoolSize = 524288;   wsHttp.MaxReceivedMessageSize = 2147483647;   wsHttp.ReaderQuotas.MaxArrayLength = 6553600;   wsHttp.ReaderQuotas.MaxStringContentLength = 2147483647;   wsHttp.ReaderQuotas.MaxBytesPerRead = 6553600;   wsHttp.ReaderQuotas.MaxDepth = 6553600;   wsHttp.ReaderQuotas.MaxNameTableCharCount = 6553600;   wsHttp.SendTimeout = new TimeSpan(0, 10, 0);   wsHttp.Security.Mode = NetNamedPipeSecurityMode.None;   channelFactory = new ChannelFactory<IClientServer>(wsHttp, url);   foreach (OperationDescription op in channelFactory.Endpoint.Contract.Operations)   {    DataContractSerializerOperationBehavior dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>() as DataContractSerializerOperationBehavior;    if (dataContractBehavior != null)    {     dataContractBehavior.MaxItemsInObjectGraph = 2147483647;    }   }  }  /// <summary>  /// 計(jì)算(測(cè)試方法)  /// </summary>  public double Calculate(TestData data)  {   proxy = channelFactory.CreateChannel();   try   {    return proxy.Calculate(data);   }   catch (Exception ex)   {    throw ex;   }   finally   {    (proxy as ICommunicationObject).Close();   }  } }}

七、客戶端調(diào)用服務(wù)接口:

using DataService;using DataStruct;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using Utils;using WCFServer;namespace 客戶端{(lán) public partial class Form1 : Form {  public Form1()  {   InitializeComponent();  }  //測(cè)試1  private void button1_Click(object sender, EventArgs e)  {   button1.Enabled = false;   txtSum.Text = string.Empty;   IClientServer client = new ClientServer();   double num1;   double num2;   double sum = 0;   if (double.TryParse(txtNum1.Text, out num1) && double.TryParse(txtNum2.Text, out num2))   {    DateTime dt = DateTime.Now;    BackWork.Run(() =>    {     sum = client.Calculate(new TestData(num1, num2));    }, () =>    {     double time = DateTime.Now.Subtract(dt).TotalSeconds;     txtTime.Text = time.ToString();     txtSum.Text = sum.ToString();     button1.Enabled = true;    }, (ex) =>    {     button1.Enabled = true;     MessageBox.Show(ex.Message);    });   }   else   {    button1.Enabled = true;    MessageBox.Show("請(qǐng)輸入合法的數(shù)據(jù)");   }  }  //測(cè)試2  private void button2_Click(object sender, EventArgs e)  {   button2.Enabled = false;   txtSum.Text = string.Empty;   IClientServer client = new ClientServer();   double num1;   double num2;   double sum = 0;   if (double.TryParse(txtNum1.Text, out num1) && double.TryParse(txtNum2.Text, out num2))   {    DateTime dt = DateTime.Now;    BackWork.Run(() =>    {     for (int i = 0; i < 1000; i++)     {      sum = client.Calculate(new TestData(num1, num2));     }    }, () =>    {     double time = DateTime.Now.Subtract(dt).TotalSeconds;     txtTime.Text = time.ToString();     txtSum.Text = sum.ToString();     button2.Enabled = true;    }, (ex) =>    {     button2.Enabled = true;     MessageBox.Show(ex.Message);    });   }   else   {    button2.Enabled = true;    MessageBox.Show("請(qǐng)輸入合法的數(shù)據(jù)");   }  } }}

八、工具類BackWork類:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;/** * 使用方法:BackWork.Run(() => //DoWork{}, () => //RunWorkerCompleted{}, (ex) => //錯(cuò)誤處理{}); */namespace Utils{ /// <summary> /// BackgroundWorker封裝 /// 用于簡化代碼 /// </summary> public class BackWork {  /// <summary>  /// 執(zhí)行  /// </summary>  /// <param name="doWork">DoWork</param>  /// <param name="workCompleted">RunWorkerCompleted</param>  /// <param name="errorAction">錯(cuò)誤處理</param>  public static void Run(Action doWork, Action workCompleted, Action<Exception> errorAction)  {   bool isDoWorkError = false;   Exception doWorkException = null;   BackgroundWorker worker = new BackgroundWorker();   worker.DoWork += (s, e) =>   {    try    {     doWork();    }    catch (Exception ex)    {     isDoWorkError = true;     doWorkException = ex;    }   };   worker.RunWorkerCompleted += (s, e) =>   {    if (!isDoWorkError)    {     try     {      if (workCompleted != null) workCompleted();     }     catch (Exception ex)     {      errorAction(ex);     }    }    else    {     errorAction(doWorkException);    }   };   worker.RunWorkerAsync();  } }}

九、效果圖示:

以上這篇WCF實(shí)現(xiàn)進(jìn)程間管道通信Demo分享就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸州市| 黄石市| 万荣县| 上犹县| 会宁县| 德阳市| 达拉特旗| 女性| 安平县| 翁牛特旗| 巫山县| 错那县| 襄汾县| 同江市| 上饶县| 湖州市| 龙井市| 前郭尔| 奈曼旗| 金坛市| 永安市| 中卫市| 安龙县| 洪泽县| 九江县| 马龙县| 本溪市| 桐乡市| 克东县| 德州市| 冕宁县| 内乡县| 长乐市| 依安县| 隆尧县| 都兰县| 浑源县| 渝北区| 阿尔山市| 开封县| 桂阳县|