【问题标题】:Returning an interface from a WCF service从 WCF 服务返回接口
【发布时间】:2008-11-13 21:07:11
【问题描述】:

我有一些 .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 远程处理一样。

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

有什么想法吗?

【问题讨论】:

    标签: wcf user-interface remoting return


    【解决方案1】:
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多