Remoting 笔记

来源:互联网 发布:淘宝我的宝贝 编辑:程序博客网 时间:2024/05/18 03:17

Remoting 笔记(一)

Remoting创建方法

1.       创建远程对象

继承自System.MarshalByRefObject

里面只有public的方法才能被远程调用。

2.       创建一个应用程序作为“宿主(host)”,以接收客户请求,

注册通道

内置通道:TCPHTTP

注册服务器激活的远程对象

(WellKnown)

SingletonSingleCall

URL

       运行宿主程序

3.       创建一个客户端调用远程对象。

注册通道 要和服务器一样

根据URL得到对象代理

使用代理调用远程对象

Remoting传递参数

要传递可序列化的类型和简单类型

传递自定义类型,要加上[Serializable]标签

Singleton VS SingleCall

都是服务器激活的对象(WellKnow

Singleton(单实例)

在服务器端只实例化一次。

以后每次调用都访问同一个实例。不论同一客户端还是不同客户端。

可以维持状态。

对持有状态编程。

SingleCall(单调用)

每次调用都实例化新的实例。

更好的支持无状态编程模型。

效率更好,支持无状态编程。

Serialization VS. MarshalByRefObject

按值列集(Serialization

       得到远程对象的副本。

       对副本的操作不影响远程对象。

不论远程对象是Singleton 还是SingleCall

按引用列集(MarshalByRefObject

       得到远程对象的引用,本地创建代理(Proxy

       能过(Proxy)对远程对象访问。

       Singleton记录更改,SingleCall无状态。

Demo

Serialization

[Serialization]

public class MySerialized{}

MarshalByRefObject

public class MyRemote:System.MarshalByRefObject{}

Remoting模式:

       服务器/客户端模式

       如果实现端对端(Peer-to-Peer

       则每个端既是服务器又是客户端。

 

 

Remoting 笔记(二)

 

配置文件

随时更改,通道,端口,URL的设置而不用重编译。

       Server端的配置文件:

<configuration>

<system.runtime.remoting>

       <application>

       <service>

       <wellknown mode=”Singleton” objectUrl=”SayHello” type=”RemotingSamples.HelloServer,General”/>

</service>

<channels>

       <channel port=”8086” ref=”http”/>

</channels>

</application>

</system.runtime.remoting>

</configuration>

 

客户端配置文件:

<configuration>

<system.runtime.remoting>

       <application>

       <client>

       <wellknown url=”http://localhost:8086/SayHello” type=”RemotingSamplesHelloServer,General” />

</client >

<channels>

       <channel port=”0” ref=”http”/>

</channels>

</application>

</system.runtime.remoting>

</configuration>

 

服务器端和客户端配置文件只有在<wellknown>节点中的配置不同。

 

配置文件的调用:

Server.cs:

       RemotingConfiguration.Configure(“Server.exe.config”);

Client.cs

       RemotingConfiguration.Configure(@”client.exe.config”);

       HelloServer obj2=new HelloServer();

这里虽然使用了一个new 但并没有调用Hello的构造函数,只是调用了一个HelloServer的一个代理。

 

租约:

服务器端创建一个对象,如果一定时间没,没有动作,就把这个对象垃圾回收掉。

只对Singleton模式有效。

续约:

只要访问这个对象,这个对象就续约了。

隐式续约:

每次调用远程对象上的方法时,自动进行。

显示的续约:

ILease.Renew()

发起租约:

ISponsor接口

ILease.Register()

 

 

50.5’

 

 

 

 

 

 

 
原创粉丝点击