WCF 中有没有一种方法可以指向服务器上它可以使用的方法?

Is there a way in WCF to have a pointer to a method on the server that it can use?

假设您在 WCF 合同中有一个名为 "CalcArea()" 的方法。一旦我在客户端中获得对象的实例,我想调用 myObject.CalcArea() 并将调用请求传输到服务器对象(在我序列化客户端对象时使用)和 return客户端结果。有没有办法在不为 "CalcArea()" 创建单独的 WCF 服务的情况下做到这一点?所以像这样:

MyObject obj = Channel.GiveMeObject(name)
obj.ExecMethodOnServer()

我不太确定我明白了,所以让我查一下:

  • 您有一个公开方法 CalcArea 的 WCF 服务端点。
  • 您还有一个对象 MyObject 的实例,表示一些几何抽象,它也有一个 CalcArea() 方法。
  • 您想使用实例方法调用来计算此对象的面积,并在客户端上提供可用数据,但您想要面积计算的繁重工作(可能是包含数千个 3D 模型的表面积计算三角形)在服务器上执行。

当然可以。您需要 CalcArea WCF OperationContract 方法来接受本地类型的对象。由于 MyObject 显然已经是此 WCF 服务的 DataContract(通过从 GiveMeObject 方法获取一个证明),这是相当微不足道的 只要 MyObject 实例可以访问 WCF 代理:

public class MyObject()
{
    private MyWcfProxy WcfChannel;

    public MyObject (MyWcfProxy wcfChannel) {WcfChannel = wcfChannel;}

    public decimal CalcArea() { /*Area calculation logic*/ }

    public decimal CalcAreaOnServer() { return WcfChannel.CalcArea(this); }
}

您还可以在逐个调用的基础上将连接的 WCF 代理对象传递给 CalcAreaOnServer,从而允许您使用与从中接收该对象实例的代理实例不同的代理实例(但需要使用代码能够提供该代理,可能会公开最好保密的实现细节)。