Step1:建立服务器程序:Server.cs
Step2:建立业务组件:RemoteServer.cs
Step3:客户端调用程序:ClientWin.cs
服务器端界面
客户端界面
代码:
Server.cs
private void Form1_Load(object sender, System.EventArgs e)
{
filename = "SrvProflile.ini";
string path = @"\mydir\";
fullpath = Path.GetFullPath(filename);
try
{
TcpChannel channel = new TcpChannel(Convert.ToInt16(RIniFile(fullpath,"Port")));//此处是读取ini文件来得到用户指定的端口 此处测试用8058
ChannelServices.RegisterChannel(channel);
dotNetBarManager1.GetItem("ServerStatus").Text="服务端已经启动,请单击<开始服务>按钮开始服务....";
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
this.Close();
}
}
private void StartService_Click(object sender, System.EventArgs e)
{
try
{
service1 = new ServerObject();
ObjRef objRef = RemotingServices.Marshal((MarshalByRefObject)service1,"service1");
dotNetBarManager1.GetItem("ServerStatus").Text="对象已经启动....";
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private string RIniFile(string fp,string val)
{
StringBuilder temp = new StringBuilder ( 255 ) ;
string FileName = fp ;
string section = "Server" ;
string key = val ;
int i = GetPrivateProfileString ( section , key ,"无法读取对应数值!" , temp , 255 , FileName ) ;
//显示读取的数值
return temp.ToString();
}
RemoteServer.cs
namespace ServerRemoteObject
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
///
//Cargo业务区
[Serializable]
public class CargoInfo
{
public CargoInfo()
{
}
private string cmpname;
private string tel;
private string fax;
private string address;
private string name;
private string mobile;
private string bigbillno;
public string Cmpname
{
get {return cmpname;}
set {cmpname = value;}
}
public string Tel
{
get {return tel;}
set {tel = value;}
}
public string Fax
{
get {return fax;}
set {fax = value;}
}
public string Address
{
get {return address;}
set {address = value;}
}
public string Name
{
get {return name;}
set {name = value;}
}
public string Mobile
{
get {return mobile;}
set {mobile = value;}
}
public string BigBillNo
{
get {return bigbillno;}
set {bigbillno = value;}
}
}
public class ServerObject:MarshalByRefObject
{
//读ini文件
[ DllImport ( "kernel32" ) ]
private static extern int GetPrivateProfileString ( string section ,
string key , string def , StringBuilder retVal ,
int size , string filePath ) ;
//Read SerProFile.ini
private static string RIniFile(string val)
{
string filename = "SrvProflile.ini";
string fullpath;
fullpath = Path.GetFullPath(filename);
StringBuilder temp = new StringBuilder ( 255 ) ;
string FileName = fullpath ;
string section = "Server" ;
string key = val ;
int i = GetPrivateProfileString ( section , key ,"无法读取对应数值!" , temp , 255 , FileName ) ;
//显示读取的数值
return temp.ToString();
}
public string name;
public int j = 2;
SqlConnection conn = new SqlConnection("server="+"RIniFile("SrvIP")+"+";uid="+RIniFile("UID")+";pwd="+RIniFile("PWD")+";database=MH_DB");
public string tst(CargoInfo cin)
{
return cin.Cmpname;//DateTime.Now.ToString();
}
public ServerObject()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataSet GetAuthors()
{
DataSet ds = new DataSet();
conn.Open();
SqlDataAdapter ada = new SqlDataAdapter("select * from authors",conn);
conn.Close();
ada.Fill(ds,"a");
return ds;
}
public string InsertCargo(DataSet ds,CargoInfo CI)
{
SqlCommand sqlIncomm;
int i;
SqlDataAdapter sqlDataAdapter2 = new System.Data.SqlClient.SqlDataAdapter();
sqlIncomm = new System.Data.SqlClient.SqlCommand();
sqlIncomm.CommandText = "INSERT INTO Cargo_Table(C_BIGBILLNO) VALUES (@C_BIGBILLNO)";
sqlIncomm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@C_BIGBILLNO", System.Data.SqlDbType.VarChar, 50, "C_BIGBILLNO"));
sqlIncomm.Connection = this.conn;
sqlDataAdapter2.InsertCommand = sqlIncomm;
try
{
conn.Open();
for(i=0;i<ds.Tables[0].Rows.Count;i++)
{
sqlIncomm.Parameters["@C_BIGBILLNO"].Value =CI.BigBillNo
sqlDataAdapter2.InsertCommand.ExecuteNonQuery();
}
conn.Close();
return "保存数据成功";
}
catch(Exception ex)
{
return ex.Message.ToString();
}
}
}
}
ClientWin.cs
private void frmMain_Load(object sender, System.EventArgs e)
{
tabStrip1.MdiForm=this;
try
{
TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private void bt_Save_Click(object sender, System.EventArgs e)
{
try
{
CargoInfo ci = new CargoInfo();
ServerObject obj;
obj = (ServerObject)Activator.GetObject(typeof(ServerObject),"tcp://192.168.0.103:8058/service1");
ci.Cmpname=this.tb_out_com.Text;
ci.Tel = this.tb_out_tel.Text;
ci.Fax = this.tb_out_fax.Text;
ci.Address = this.tb_out_address.Text;
ci.Name = this.tb_out_man.Text;
ci.Mobile = this.tb_out_mobile.Text;
ci.BigBillNo = this.big_no.Text;
//保存数据
int ds_record;
ds_record = this._CargoDS.Tables[0].Rows.Count;
if(ds_record>0)
{
string total = obj.InsertCargo(this._CargoDS,ci);
MessageBox.Show(total);
}
else
{
MessageBox.Show("没有可以保存的数据","Error");
return;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(),"Error");
}
}
不当之处请指教!