求个remoting 思路
今天才开始看remoting 感觉好抽象。
要求能调用另一台电脑上的程序或进程。
请问有没好的思路啊?
或者有好的代码等就感激不尽...
代码:liuhui2082@163.com 并请留言说明下 谢谢
------解决方案--------------------http://blog.csdn.net/winderxp/archive/2007/04/13/1562963.aspx
------解决方案--------------------帮LZ顶 给点分把
------解决方案--------------------微软webcast 系列 课程 Remoting
http://www.msdnwebcast.com.cn/CourseSeries.aspx?id=57
------解决方案--------------------学习ing..
------解决方案--------------------其实就是winSocket了。
------解决方案--------------------帮LZ顶
------解决方案--------------------RemotingServices
通过使用类 RemotingServices 提供的方法,我们可以很轻松实现这些目标。
Marshal: 用于将 MarshalByRefObject 转换为 ObjRef 类的实例。
Connect:客户端可以用该方法创建远程代理对象的实例。
Disconnect:断开服务器远程对象与信道的连接。客户端代理在断开后调用任何方法都会触发 RemotingException。
Unmarshal:接受 ObjRef 并从它创建一个客户端代理对象。这个方法很少被使用,因为多数情况下我们并不会直接将 ObjRef 显示传递给客户端,而是交由 Remoting 基础结构来处理。
ObjRef
ObjRef 是远程对象的可序列化表示,用于跨应用程序域边界传输对象引用。为对象创建 ObjRef 称为封送。可以通过信道将 ObjRef 传输到另一个应用程序域(可能在另一个进程或计算机上)。达到其他应用程序域后,需立即分析 ObjRef,以便为该对象创建一个代理(通常连接到实际的对象)。此操作称为拆收处理 (Unmarshaling)。在拆收处理过程中,分析 ObjRef 以提取远程对象的方法信息,并创建透明代理和 RealProxy 对象。在透明代理注册到公共语言运行库之前,将已分析的 ObjRef 的内容添加到透明代理中。
ObjRef 包含:描述所封送对象的 Type 和类的信息,唯一标识特定对象实例的 URI,以及有关如何到达对象所在的远程处理分支的相关通信信息。
--------------------------------------------
实现已知对象:
1.构建服务器端:
(1)添加对System.Runtime.Remoting.dll
(2)实现一个派生自MarshalByRefObject的类
(3)选择一种可用的通道,TCP,HTTP,然后用ChannelServices.RegisterChannel()方法注册此通道
(4)用RemotingConfiguration.RegisterWellKnownServiceType()方法把这个类注册为已知对象
(5)保持服务器处于激活态
首先是继承了MarshalByRefObject的类:
using System;
namespace MathLibrary
{
/**//// <summary>
/// SimpleMath 的摘要说明。
/// </summary>
public class SimpleMath:MarshalByRefObject
{
public SimpleMath()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public int Add(int a ,int b)
{
Console.WriteLine( "SimpleMath.Add({0},{1}) ",a,b);
return a+b;
}
public int Subtract(int a, int b)
{
Console.WriteLine( "SimpleMath.Subtract({0},{1}) ",a,b);
return a-b;
}
}
}
接着构建服务器端:
1using System;
2using System.Runtime.Remoting;
3using System.Runtime.Remoting.Channels;
4using System.Runtime.Remoting.Channels.Http;
5using MathLibrary;
6
7namespace MathServer
8{
9 /**//// <summary>
10 /// ServerMain 的摘要说明。
11 /// </summary>
12 public class ServerMain
13 {
14 public ServerMain()
15 {
16 //
17 // TODO: 在此处添加构造函数逻辑
18 //
19 }
20 public static void Main(string[] args)
21 {
22 //建立一个通道并指定段口号
23 HttpChannel channel = new HttpChannel(13101);
24 //通过运行时的远程服务来注册通道
25 ChannelServices.RegisterChannel(channel);
26 //注册被调用类为已知对象well-know
27 RemotingConfiguration.RegisterWellKnownServiceType(