每个人都在说如何用WCF取代.NET Remoting,但我想知道它是多么准确.我还没有看到任何关于Remoting被弃用的官方消息,在我看来,Remoting肯定比WCF更有意义.即使在框架的4.0版本中,也没有弃用与Remoting相关的对象或方法.我的理解是3.5和4.0框架中的System.AddIn使用Remoting.
有没有人有任何相反的官方消息?
在文章" 选择.NET中的通信选项(3.0版,因为那是该文章的最新版本)"中,它指出:
8跨应用程序域通信
如果需要在同一进程中支持不同应用程序域中的对象之间的通信,则必须使用.NET远程处理.
现在,这当然不准确,因为WCF当然可以用于跨越appdomain边界,但它是否正在为该场景提供官方建议?
更新:我发送了Clemens Vasters(谁是拥有Remoting和WCF的团队)这个问题:
Clemens,我知道你是拥有远程控制和wcf的团队,我有几个问题,我认为我需要去找源代码.
首先,我有一个关于远程处理是否会消失的问题.具体来说,我们有一个相当大的应用程序,它广泛使用远程处理进行跨域appdomain通信,我想知道远程处理的这种用法是否被认为是"遗留".如果是这样,AppDomain.CreateInstance和朋友会被其他东西取代吗?
这是他的回复:
远程处理是.Net框架的一部分,因此它不会消失.自Windows NT 3.5/Windows 95以来,COM一直在Windows中,并且还没有消失,我也不认为它会很快消失.
也就是说,Remoting的开发投资非常少.WCF是Remoting的继承者,并取代了托管代码的COM/DCOM.
对于进程内,跨域应用程序通信远程处理是CLR的本地通信方式.如果您发现在短时间内抽取大量数据或大量消息的性能问题,您应该认真考虑WCF和NetNamedPipeBinding.
出于某种原因,我无法远程连接到我的MySQL服务器.我已经尝试了一切,但我仍然遇到错误.
root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
现在,我试过跑步
GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX';
GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';`
Run Code Online (Sandbox Code Playgroud)
但仍然没有!我做错了什么?
编辑:my.cnf已注释掉bind ip.
我在Server 2008 R2上成功启用了PSRemoting.我可以使用主机名作为目标在同一网络中进行远程pssession.
当我尝试从任何计算机(在网络内或从其他网络(例如通过VPN))使用IP地址作为目标时,我失败了.我希望能够通过我的VPN连接使用远程处理,因为无法解析主机名,因此我必须使用IP地址.
我不想在我的hosts文件中添加名称,因为我们的客户端上有一些其他服务器具有相同的dns-name,我不想删除并再次插入name-ip-address-association然后再次.
我希望有人能告诉我如何通过IP调用psremoting-target.
编辑:更具体地说,我希望能够运行:
Enter-PSSession -Computername 192.168.123.123 -credentials $cred
Run Code Online (Sandbox Code Playgroud)
但是,如果我将主机名传递给" -Computername
" ,我只能运行该命令
Edit2:
当我尝试使用ip而不是主机名(来自内部网络)登录时,我收到了错误消息:
Enter-PSSession : Connecting to remote server failed with the following error message : The WinRM client cannot process
the request. Default authentication may be used with an IP address under the following conditions: the transport is HT
TPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure T
rustedHosts. Note that computers …
Run Code Online (Sandbox Code Playgroud) 当MarshalByRef对象从AppDomain(1)传递到另一个(2)时,如果你在第二个AppDomain(2)中调用方法之前等待6分钟,你将得到一个RemotingException:
System.Runtime.Remoting.RemotingException:对象[...]已断开连接或在服务器上不存在.
有关此问题的一些文档:
如果我错了,请纠正我:如果InitializeLifetimeService返回null,那么当AppDomain 2被卸载时,该对象只能在AppDomain 1中收集,即使收集了代理?
有没有办法禁用生命周期并保持代理(在AppDomain 2中)和对象(在AppDomain1中)保持活动状态,直到代理完成为止?也许与ISponsor ......?
.NET有一个称为远程处理的东西,你可以在不同的应用程序域甚至物理机器之间传递对象.我不完全理解魔法是如何完成的,因此这个问题.
在远程处理中,有两种传递对象的基本方法 - 它们可以被序列化(转换为一堆字节并在另一端重建)或者它们可以从MarshalByRefObject继承,在这种情况下.NET会生成一些透明代理,所有这些都是方法调用被转发回原始实例.
这非常酷,就像魔法一样.而且我不喜欢编程中的魔法.纵观MarshalByRefObject
与反射我看不到任何会使其有别于任何其他典型的对象.甚至不是一个奇怪的内部属性或任何东西.那么整个透明代理事件是如何组织起来的呢?我可以自己制作这样的机制吗?我可以制作一个MyMarshalByRefObject
不会继承的替代品,MarshalByRefObject
但仍会采取相同的行动吗?或者正在MarshalByRefObject
接受.NET引擎本身的一些特殊处理,整个远程专长是不可复制的?
我是Web服务和RMI的新手,我想知道哪种是在不同的Web应用程序之间进行远程处理的更好方法,当这些应用程序都是用Java编写的时候,就是当不同的编程语言无关紧要时(这将是WS的优点).
虽然一方面我猜想在使用Web服务时有一个性能开销(有没有人有一些数字可以证明这一点?),另一方面,在我看来,Web服务更加松散耦合,可以用来实现更加面向服务的体系结构(SOA)(RMI无法实现,对吧?).
虽然这是一个非常普遍的问题,但你有什么看法?
谢谢
我有一个应用程序需要在许多AppDomain之间发送适量的消息.我知道我可以使用远程处理实现这一点,但我也注意到有跨域委托.谁有人看过这种问题?
.NET协议缓冲区是否比Remoting(SerializationFormat.Binary)更轻/更快?是否会以语言/框架术语为其提供一流的支持?即它是否像Remoting/WebServices一样透明地处理?
我认为这很简单,但我找不到答案.
我正在使用远程处理,我想在app.config中存储RemotingConfiguration.当我打电话时,RemotingConfiguration.Configure
我必须提供远程信息所在的文件名.所以......我需要知道当前配置文件的名称.
目前我正在使用这个:
System.Reflection.Assembly.GetExecutingAssembly().Location + ".config"
Run Code Online (Sandbox Code Playgroud)
但这仅适用于Windows应用程序,不适用于Web应用程序.
是不是有任何类可以为我提供当前配置文件的名称?
remoting ×10
c# ×5
.net ×4
appdomain ×3
app-config ×1
clr ×1
jax-ws ×1
mysql ×1
powershell ×1
rmi ×1
ubuntu ×1
wcf ×1
web-services ×1