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);

好吧,这行不通。远程对象模型,一段时间后死亡。

你确认这种行为吗?

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

4

1 回答 1

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>
于 2013-04-02T11:08:46.613 回答