您的位置:首页 > 编程语言

.net Remoting 示例代码

2014-12-10 16:24 148 查看
最近一个项目用到这个东西,就整理了下写了示例,仅供新手参考,如有不当之处请大侠指点一二;

首先要说明Remoting是个什么东西了,它是microsoft结合.net的基础上延伸出来的采用分布式编程的一种技术,Remoting主要用于管理跨应用程序域的同步和异步RPC 会话。在默认情况下,Remoting使用 HTTP 或 TCP 协议,并使用 XML 编码的 SOAP 或本机二进制消息格式进行通信。.NET Remoting 提供了非常灵活和可扩展的编程框架,并且他可以管理对象的状态。 Remoting还支持IPC信道,IPCChannel是.NET Framework 2.0 里面新增的,它使用
Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能,否则只能是tcp信道或http信道;

下面请看示例:

一、创建远程对象

public interface IPowerService
{
string WriteLog();
}
public class UserService : MarshalByRefObject,IPowerService
{
public DataTable GetUserList()
{
string sql = "select * from BAS_USER ";
return new UserData().GetUserList(sql);
}

public string WriteLog()
{
return "系统日志记录时间是:" + DateTime.Now.ToLocalTime() ;
}
}

二、创建一个宿主程序,这个程序可以是控制台应用程序,也可以是winforms程序,还可以是web应用程序让IIS承载;创建宿主程序的步骤 1定义并注册通道 2注册服务器激活的远程对象
try
{
HttpServerChannel server = new HttpServerChannel(9000);
//TcpServerChannel server = new TcpServerChannel(9001);
ChannelServices.RegisterChannel(server, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(UserService), "UserService.rem", WellKnownObjectMode.Singleton);
Console.WriteLine("服务启动成功!");
Console.WriteLine("----------------------------------------------------------------");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("服务启动失败:" + ex.Message);
Console.WriteLine("----------------------------------------------------------------");
Console.ReadLine();
}

三、客户端调用程序
IPowerService obj = null;
try
{
//ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpClientChannel(), false);
ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpClientChannel(), false);
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());

}

//obj = (IPowerService)Activator.GetObject(typeof(IPowerService), "tcp://192.168.2.102:9001/UserService.rem");
obj = (IPowerService)Activator.GetObject(typeof(IPowerService), "http://192.168.2.102:9000/UserService.rem");
if (obj != null) {
var us = (obj as UserService);
var dt = us.GetUserList();
StringBuilder sb = new StringBuilder();
if (dt != null)
{
foreach (DataRow item in dt.Rows)
{
sb.Append(item["Login_Name"] + "<br />");
}

}

sb.Append("-------------------tcp or http demo-----------------" + us.WriteLog());
Literal1.Text = sb.ToString();
}
else
{
Literal1.Text = "与服务器连接失败!";
}
注意:当服务器端定义的是如http信道,那么客户端调用的必须也是http信道;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .net 应用程序 tcp soap
相关文章推荐