делаешь класс и кидаешь его в сборку которую знает и сервер и клиент
(обычно та где храниться интерфес удаленного объекта ну или сам объект егоего юзают без интерфейса)
public abstract class DelegatableObject : MarshalByRefObject
{
public override object InitializeLifetimeService()
{
return null;
}
public void Callback()
{
InternalCallback();
}
protected abstract void InternalCallback();
}
далее на клиенте создаешь класс и наследуешь его от DelegatableObject
ну и создаешь экземпляр и
IServer.Update += new FooDelegate(fooDelegateAbleObject.Callback);