技术开发 频道

.NET Remoting中的事件处理

   【IT168 技术文档】 好多人都对Remoting中的事件处理很疑惑,现将完整实现Remoting中事件处理的过程写出来,并对容易犯错误的地方进行总结,希望能给大家一些帮助。
    现假设有一个留言板程序:
    以下代码中,MsgBoard为以Singleton模式存活于服务器端的共享留言板实例,AddMessage是客户端添加留言的接口,  MsgBoard定义如下:
  public class MsgBoard:MarshalByRefObject 
    
{
        public delegate void EventDelegate(string info);

        public event EventDelegate OnInfoAdded;

        public void AddMessage(string info)

        
{
            Console.WriteLine(info);
            if(OnInfoAdded!=null)
                      OnInfoAdded(info);
        }

    }
    在有客户端添加留言时,激发一个事件,我们的客户端去订阅该事件来得到留言板更新的通知。
    服务器端代码如下:
Using directives

namespace ConsoleServer
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            RemotingConfiguration.RegisterWellKnownServiceType(
typeof(MyLibrary.MsgBoard), "MyUri", WellKnownObjectMode.

Singleton);
            HttpChannel myChannel 
= new HttpChannel(1080);
            ChannelServices.RegisterChannel(myChannel);

            
//////
            IServerChannelSink sc = myChannel.ChannelSinkChain;
            
while (sc != null)
            
{
                
if (sc is BinaryServerFormatterSink)
                
{
                    ((BinaryServerFormatterSink)sc).TypeFilterLevel 
= TypeFilterLevel.Full;
                    
//break;
                }

                
if (sc is SoapServerFormatterSink)
                
{
                    ((SoapServerFormatterSink)sc).TypeFilterLevel 
= TypeFilterLevel.Full;
                    
//break;
                }

                sc 
= sc.NextChannelSink;
            }

            Console.WriteLine("Server Started");
            Console.ReadLine();
        }

    }

}

    我们可以不要详细去关心服务器端程序的代码,我们只需要知道:
    1,服务器注册了远程服务的类型
    2,TypeFilterLevel = TypeFilterLevel.Full
    由于从.NET Framework 1.1起,缺省情况下DelegateSerializationHolder不允许被反序列化,(即FormatterSink.TypeFilterLevel = TypeFilterLevel.low)。为了实现远程事件处理,我们必须解除该约束,使ServerFormatterSink.TypeFilterLevel = TypeFilterLevel.Full

    我们更加需要关心的是我们的客户端代码:

0
相关文章