.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信道;
首先要说明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信道;
相关文章推荐
- 分布式编程->Remoting的一个代码示例(借助Remoting实现发送信息功能)
- Control Study -> Asp.net几个较复杂的显示数据控件(Repeater/DataList/DataGrid)用法 (示例代码下载)
- ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充)
- AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET框架实现服务端即时数据验证(Asp.net 2.0)(示例代码下载)
- 示例代码:利用Sps提供的remoting服务,把office文档在线转换成html文档(包括页面图片的文件)
- Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)
- (收藏)[代码示例]如何在ASP.NET中获取随机生成的cookie加密与验证密钥
- Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)
- Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
- Remoting的一个代码示例(借助Remoting实现发送信息功能)
- OrFlying VB.net版代码示例
- [代码示例]如何在ASP.NET中获取随机生成的cookie加密与验证密钥
- Asp.net 2.0 GridView的几个事件(如实现: 行的双击/单击/捕捉键盘按键/鼠标悬浮/移出效果)(示例代码下载)
- .Net(C#)获取AD用户信息的示例代码
- 101代码示例 net2.0类库
- [代码示例]如何在ASP.NET中获取随机生成的cookie加密与验证密钥
- Asp.net 2.0 新特性[PowerPoint文件与示例代码下载]
- Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)
- AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)