2012-07-11 69 views
0

我有远程服务器上的单独服务的,这有谁返回新对象给客户的方法:赞助远程实例化对象

public class MySingleton : MarshalByRefObject 
{ 
    public override object InitializeLifetimeService() 
    { 
     return null; 
    } 

    public MarshalByRefObject GetService() 
    { 
     return new Model(); 
    } 
} 

public class Model : MarshalByRefObject 
{ 
} 

我不希望这样的模型实例永远活在服务器上,所以我只是想正常使用的赞助过程中,在客户端上我创造我的模型赞助商,我将遥控租赁这个赞助商:

var sponsor = new ClientSponsor(); 
_service = _mySingleton.GetService(); 
var success = sponsor.Register(_service); 

好,这不起作用。远程对象模型,在一段时间后死亡。

你确认此内容吗?

我想这是因为服务器上的生命周期管理器没有机会初始化租约,因为对象模型是实例化并直接返回。

回答

0

我知道这是一个旧帖子,但在我搜索类似的问题时,我偶然发现了这篇文章。

也许它将取决于SinkProvider配置。因为服务器端客户端的续订请求需要反序列化。在服务器端的app.exe.config你不得不安装serverProvider,也是clientProvider这样的:

<channel ref="tcp" port="50220" useIpAddress="false"> 
<serverProviders> 
    <formatter ref="binary" typeFilterLevel="Full" /> 
</serverProviders> 
<clientProviders> 
    <formatter ref="binary" /> 
</clientProviders> 
</channel> 
<channel ref="http" port="50221" useIpAddress="false"> 
<serverProviders> 
    <formatter ref="soap" typeFilterLevel="Full" /> 
</serverProviders> 
<clientProviders> 
    <formatter ref="soap" /> 
</clientProviders> 
</channel> 

在客户端使用以下app.config.exe:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.runtime.remoting> 
    <application> 
     <channels> 
     <channel ref="tcp" port="0"> 
      <serverProviders> 
      <formatter ref="binary" typeFilterLevel="Full"/> 
      </serverProviders> 
     </channel> 
     </channels> 
    </application> 
    </system.runtime.remoting> 
</configuration>