来自Java背景,这就是我的想法:
服务器向客户端提供对象。该对象应该能够在服务器上执行。
服务器:
private string _S = "A";
public interface IFoo { void Bar(); }
private class Foo : IFoo {
void Bar() { _S = "B";}
}
public IFoo GetFoo() { return new Foo(); }
客户端:
IFoo foo = serverChannel.GetFoo();
foo.Bar();
远程处理是遗留的(每个人都会指向WCF)而WCF基本上不支持这种情况(WCF: Is there a way to return an object that is able to execute on the server?),那么我该如何实现这种行为呢?如果需要,可以使用第三方组件。
我搜索了SO,但没有找到类似的问题。如果之前确实已经回答过,请告诉我,我会删除。
答案 0 :(得分:4)
我建议不要尝试“远程”对象。这是一个危险的想法。
真的,不要这样做。远程对象有点不好。在核心层面,网络是关于传输数据。从长远来看,让您的程序使用相同的模型将使您的生活变得更加轻松。
答案 1 :(得分:3)
WCF确实是基于消息的,Remoting仍然有效....真正的问题是:你为什么不想基于消息工作?
答案 2 :(得分:2)
如果您希望在WCF中进行类型共享 - 就像您所描述的那样,并且在远程处理,在服务器和客户端上的公共程序集中共享(接口)声明 - 您可以使用NetDataContractSerializer来完成。它helped others as well。
不鼓励使用它 - 就像远程处理一样 - 基于合同的消息传递现在似乎风靡一时。
我应该添加一个适当的设计,即使使用 .Net Remoting ,您仍然会得到基于合同/消息的应用程序。您的共享接口将成为操作合同,而您的共享数据类定义将描述您传递的数据合同/消息。