在本篇文章中,我們將創建一個從數據庫讀入內容的遠程對象。文中還包括了一個忽略數據庫功能的替補對象,以使沒有數據庫可以使用的讀者仍然能夠使用.Net Remoting。
第一步:創建共享庫
依次點擊“文件”->“新創建”->“工程”,選擇創建一個C# Library,並將其命名為ResumeServerLibrary,然後點擊OK按鈕。這將創建一個我們的.Net Remote客戶端和服務器端用來通訊的“共享命令集”。
正面是完整的代碼,如果要跳過數據庫訪問部分,可以使用下面的代碼替換ResumeLoader對象:
public class ResumeLoader : System.MarshalByRefObject
{
public ResumeLoader()
{
System.Console.WriteLine("New Referance Added!");
}
public Resume GetResumeByUserID(decimal userID)
{
return new Resume(1);
}
}
名字空間是對象所需要的。請記住,如果得到System.Runtime.Remoting.Channels.Tcp名字空間不存在的信息,請檢查是否象上面的代碼那樣添加了對System.Runtime.Remoting.dll的引用。
using System;
using System.Runtime;
using System.Data.SqlClIEnt;
我們為對象使用的名字空間是DotNetRemoteTest,下面的對象是MarshalByRefObject,在其中我們創建了一個引用和包括服務器端數據庫操作全部完成所需要的所有工作。
namespace DotNetRemoteTest
{
public class ResumeLoader : System.MarshalByRefObject
{
private SqlConnection dbConnection;
public ResumeLoader()
{
this.dbConnection = new System.Data.SqlClIEnt.SqlConnection();
this.dbConnection.ConnectionString =
"data source=GRIMSAADO2K;initial catalog=underground;integrated security=SSPI;pers" +
"ist security info=True;workstation id=GRIMSAADO2K;packet size=4096";
/*具體的連接字符串會有所不同,這超出了本篇文章的范圍。如果不清楚如何創建一個數據庫連接,請使用這一對象的另一個版本。*/
System.Console.WriteLine("New Referance Added!");
}
public Resume GetResumeByUserID(decimal userID)
{
Resume resume = new Resume();
try
{
dbConnection.Open();
SqlCommand cmd = new SqlCommand(
"SELECT ResumeID, UserID, Title, Body FROM Resume as theResume WHERE theResume.UserID="+ userID +""
, dbConnection
);
SqlDataReader aReader = cmd.ExecuteReader();
if(aReader.Read())
{
resume.ResumeID=aReader.GetDecimal(0);
resume.UserID=aReader.GetDecimal(1);
resume.Title=aReader.GetSt