6

我有一些 .NET 远程处理代码,其中在某些服务器端类中实现的工厂方法返回具体对象的接口,也在同一台服务器上执行。.NET 远程自动创建代理并允许我将接口传递给客户端,然后客户端可以直接调用它们。

示例接口:

public interface IFactory
{
    IFoo GetFoo();
}

public interface IFoo
{
    void DoSomething();
}

示例客户端代码:

...
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url);
...
IFoo foo = factory.GetFoo ();  // the server returns an interface; we get a proxy to it
foo.DoSomething ();
...

这一切都很好。但是,现在我正在尝试将我的代码迁移到 WCF。我想知道是否有一种方法可以传递接口并让 WCF 在客户端动态生成代理,就像原始的 .NET 远程处理一样。

而且我不想返回类实例,因为我不想公开真实的类。并且序列化完整实例并在服务器和客户端之间来回发送它也不是一种选择。我真的只是希望客户端通过接口指针/代理与服务器对象交谈。

有任何想法吗?

4

3 回答 3

2

使用会话而不是客户端激活对象 (MSDN)

于 2008-11-13T21:20:52.687 回答
1

对不起,杰泽尔,我不明白。

是的,我可以ChannelFactory在客户端上使用它来创建一个代理IFactory,因为该单例对象已由服务器通过ServiceHost.

但是我IFoo在服务器上的实例没有与任何关联ServiceHost;我只想通过IFactory在客户端调用我的代理来取回它们,并让 WCF 调用服务器IFactory,这将提供一些IFoo,然后将其编组回客户端并包装到动态生成的代理中。我真的只想能够factory.GetFoo ();在我的客户上写...

与此同时,Brian 向我指出了我在 MSDN 上忽略的一个非常有趣的文档,该文档解释了如何通过使用会话来模仿 .NET Remoting 接口编组,EndPointAddress10并且......正如您所写的那样,ChannelFactory以获取客户端代理。

所以,现在我知道如何复制我的 .NET 远程处理代码,但为此付出了相对较高的成本。WCF 涉及的代码复杂性比普通的旧 .NET 远程解决方案要高很多。

于 2008-11-13T21:36:55.463 回答
0

ChannelFactory 类正是这样做的,在给定接口的运行时动态生成代理。

于 2008-11-13T21:10:39.447 回答