13 实战
在线升级
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.ServiceModel; using System.IO; using System.Reflection; namespace load { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //进入 private void button1_Click(object sender, EventArgs e) { //下载客户端程序 NetTcpBinding bind = new NetTcpBinding(); bind.MaxReceivedMessageSize = 9999999; bind.ReaderQuotas.MaxArrayLength = 99999999; bind.ReaderQuotas.MaxStringContentLength = 99999999; EndpointAddress address = new EndpointAddress("net.tcp://localhost:5400/sell"); ChannelFactory<Contracts.ISellOpration> factory = new ChannelFactory<Contracts.ISellOpration>(bind, address); byte[] bt = factory.CreateChannel().download(); //把bt转成dll文件 FileStream stream = new FileStream(Application.StartupPath + "/winClient.dll", FileMode.Create); stream.Write(bt, 0, bt.Length); stream.Close(); factory.Close(); //启动客户端程序(dll) Assembly ass = Assembly.LoadFile(Application.StartupPath + "/winClient.dll"); Type tp = ass.GetType("winClient.frmMain"); Form frm = (Form)Activator.CreateInstance(tp); frm.Show(); } } }
ISellOpration.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace Contracts { [ServiceContract] public interface ISellOpration { //商品进货 [OperationContract] int addstockBill(Bill bill); //商品销售 [OperationContract] int addSellBill(Bill bill); //下载新版本的客户应用程序 [OperationContract] byte[] download(); } }
ServiceOpration.cs
public class ServiceOpration:Contracts.ISellOpration { .............. //下载客户端 public byte[] download() { FileStream stream = new FileStream(Application.StartupPath+"/winClient.dll", FileMode.Open, FileAccess.Read); byte[] bt = new byte[stream.Length]; stream.Read(bt, 0, bt.Length); stream.Close(); return bt; }
winClient.dll是把WinForm项目的参数类型从“Window应用程序”改成“类库”。
其中
public partial class frmMain : Form