Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何返回能够在服务器上执行的对象?_C#_Remoting - Fatal编程技术网

C# 如何返回能够在服务器上执行的对象?

C# 如何返回能够在服务器上执行的对象?,c#,remoting,C#,Remoting,来自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.GetF

来自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确实是基于消息的,远程处理仍然有效。。。。真正的问题是:为什么不基于消息进行工作?

如果您希望在WCF中进行类型共享—就像您在远程处理中所描述的那样,在服务器和客户端的公共程序集中共享(接口)声明—您可以使用。它

它的使用是不被鼓励的——就像远程处理一样——基于合同的消息传递现在似乎非常流行

我应该补充一点,如果设计得当,即使使用.Net远程处理,您最终还是会得到一个基于契约/消息的应用程序。您的共享接口将成为操作契约,而您的共享数据类定义将描述您传递的数据契约/消息。

我建议不要尝试“远程”对象。这是一个危险的想法

  • 您对远程状态没有本地控制权。你从来没有
  • 试图解释什么是“真实”状态,什么不是,很快就会变得非常复杂
  • 从信息的角度思考,可能会产生一种从网络的角度来看更“正确”的设计——也就是说,一种正确分配责任、不做出不适当假设的设计
  • 基于消息的网络应用程序几乎肯定会更加健壮
  • 基于远程处理的应用程序通常允许更快的初始开发,但从长远来看,处理边缘条件等会导致大量额外时间

  • 真的,不要这样做。远程对象有点糟糕。在核心层面,网络是关于传输数据的。从长远来看,让您的程序使用相同的模型将使您的生活变得更加轻松。

    因为这将简化我的应用程序设计:)@mafactrct:design-wise,在接口上调用方法和发送消息之间没有太大区别。这是一样的。使用WCF,您可以获得类似远程处理的行为,拥有一个带有代理实现的接口,在后台发送消息。是的,但我希望有许多接口,以简单的方式相互交互。据我所知,这对WCF来说并不容易,即使它确实可以被模仿。这是真的。至于技术——意思是“.netremoting”——然而,人们确实成功地用它开发了应用程序。为了避免混乱,有一些规则:不回调,只使用单次调用,不共享状态,只在公共程序集中放置接口/消息声明,远程调用在客户端代码中应该是明显的等等。。。因此,最后我们只剩下为我们的远程应用程序定义简单的数据消息类。它看起来很像WCF应用程序。:-)确切地消息传递是有效的,除了一些微不足道的例子之外,几乎所有成功的网络应用程序都会看起来很像是在做消息传递。+1有趣的观点。我没有意识到远程处理似乎经常导致此类问题。@mafurtct:这不是任何特定远程处理技术的问题。这是整个远程处理思想的一个问题
    Foo.Bar
    对于“远程对象”和本地结构有着极其不同的含义,对当前数据的方式有着不同的保证,可能发生的错误也不同,性能特征也大不相同。你不能真的把这些都掩盖起来,假装它们不存在。正如安德拉斯指出的那样,一旦你承认了这些差异,你最终会得到一些看起来很像信息传递的东西。