Remoting与Windows服务
一、创建远程对象,建立项目类库
namespace RemoteObject
{
public class MyObject : MarshalByRefObject
{
public DataSet GetData()
{
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["strconn"]);
SqlDataAdapter da = new SqlDataAdapter("select * from authors", conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
}
二、服务端、建立控制台应用程序
using System.Runtime.Remoting;
namespace RemoteServer
{
class MyServer
{
[STAThread]
static void Main(string[] args)
{
RemotingConfiguration.Configure("RemoteServer.exe.config");
Console.ReadLine();
}
}
}
建立配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="strconn" value="server=(local);uid=sa;pwd=123;database=pubs" />
</appSettings>
<system.runtime.remoting>
<application name="RemoteServer">
<service>
<wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject"
mode="Singleton" />
</service>
<channels>
<channel ref="tcp" port="9999"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
三、客户端:建立控制台项目:RemoteClient
namespace RemoteClient
{
class MyClient
{
[STAThread]
static void Main(string[] args)
{
RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject), System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
DataTable dt = app.GetData().Tables[0];
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["au_id"] + " " + dr["au_lname"]);
}
Console.ReadLine();
}
}
}
建立配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ServiceURL" value="tcp://localhost:9999/RemoteObject.MyObject"/>
</appSettings>
</configuration>
4、使用windows服务承载
1、建立一个新的windows服务项目WindowsService1
2、打开Service1代码视图,找到OnStart部分,加入代码
System.Runtime.Remoting.RemotingConfiguration.Configure(AppDomain.CurrentDomain.BaseDirectory + "RemoteServer1.exe.config");
config和控制台方式的config是一样的,我们让这个windows服务做的仅仅是从config文件读出配置信息进行配置通道。别忘记添加配置文件。(可将RemoteServer项目的配置文件拷进)
3、切换到设计视图,右键-添加安装程序
4、切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Account属性设置为LocalSystem,对serviceInstaller1的ServiceName属性设置为WindowsService1(服务的名字),StartType属性设置为Automatic(系统启动的时候自动启动服务)
5、还要添加RemoteObject的引用
五、建立安装项目
1、建立一个新的安装项目RemoteServerSetup
2、右键-添加-项目输出-主输出-选择WindowsService1-确定
3、右键-视图-自定义操作-自定义操作上右键-添加自定义操作-打开应用程序文件夹-选择刚才那个主输出-确定
4、重新生成这个安装项目-右键-安装