从WCF服务返回接口
-
08-07-2019 - |
题
我有一些.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远程处理一样。
我不想返回类实例,因为我不想公开真正的类。并且序列化完整实例并在服务器和客户端之间来回发送也不是一种选择。我真的只是希望客户端通过接口指针/代理与服务器对象通信。
有什么想法吗?
解决方案
其他提示
对不起,杰泽尔,我不明白。
是的,我可以在客户端上使用ChannelFactory
来创建IFactory
的代理,因为该单例对象已经<!>“发布<!>”;由服务器通过ServiceHost
上的URI。
但是我在服务器上的IFoo
实例没有与任何factory.GetFoo ();
相关联;我只是想通过在客户端上调用我的EndPointAddress10
代理来让他们回来,并让WCF对服务器进行调用<=>,这将提供一些<=>,然后将其编组回客户端并包装进入动态生成的代理。我真的只想在我的客户上写<=> ...
与此同时,Brian向我指出了一个我在MSDN上忽略的一个非常有趣的文档,它解释了如何通过使用会话来模仿.NET Remoting接口编组,并且<=>和...正如您所写,<=>获得客户端代理。
所以,现在我知道如何复制我的.NET远程代码,但为此付出了相对较高的代价。 WCF涉及的代码复杂性比使用普通的.NET远程处理解决方案要高得多。
ChannelFactory类就是这样做的,在给定接口的情况下在运行时动态生成代理。