是否可以通过远程传输回传?我想按照myRemoteObject.PerformStuff( x => Console.WriteLine(x) );
如果没有,我将如何实现等效功能?
编辑:我知道Remoting被WCF取代了,但我仍然对这个具体案例感兴趣。 (出于好奇,WCF中的问题怎么样?)
答案 0 :(得分:5)
重要的是要添加您需要注册双工通道,而不仅仅是服务器或客户端。 否则回调将无效。
E.g。 TcpChannel / HttpChannel / IpcChannel和NOT TcpServerChannel / TcpClientChannel等。
对于防火墙解决方案,请确保在“客户端”上为TCP和HTTP通道打开回调端口(IPC不使用端口)。
答案 1 :(得分:3)
远程处理为事件提供支持。客户端代码可以简单地订阅服务器类公开的事件。 (这里有很多警告)。
此外,您可以将回调接口传递给远程类,前提是您的接口实现是MarshalByRef对象。
interface IMyCallback
{
void OnSomethingHappened(string information);
}
class MyCallbackImplementation : MarshalByRefObject, IMyCallback
{
public void OnSomethingHappened(string information)
{
// ...
}
}
class MyServerImplementation : MarshalByRefObject
{
List<IMyCallback> _callbacks = new List<IMyCallback>();
public void RegisterCallback(IMyCallback _callback)
{
_callbacks.Add(_callback);
}
public void InvokeCalbacks(string information)
{
foreach(IMyCallback callback in _callbacks)
{
_callback.OnSomethingHappened(information);
}
}
}
答案 2 :(得分:-1)
在WCF中,您使用callback operations。如果您可以使用WCF或远程处理,请选择WCF。远程处理被归类为遗产。