从WCF服务返回接口

问题描述:

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

实例接口:

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远程处理一样。

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

任何想法?

ChannelFactory类完全做到这一点,在给定接口的运行时动态生成代理。

对不起,jezell,我不明白这一点。

是的,我可以在客户端上使用ChannelFactory创建代理IFactory,因为该单例对象已被服务器通过ServiceHost上的URI“发布”。

但服务器上的我的IFoo实例未与任何ServiceHost关联;我只是想通过在客户端上拨打我的IFactory代理来让他们回来,并让WCF对服务器IFactory进行调用,该服务器将提供一些IFoo,然后将其整理回客户端并封装到动态生成的代理中。我真的只想在我的客户端上写factory.GetFoo(); ...

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

所以,现在我知道如何复制我的.NET远程代码,但支付相对较高的成本。 WCF所涉及的代码复杂度比旧的.NET Remoting解决方案高很多。