关于Wcf事件多次执行的问题

对于WCF事件的重复调用、消息的重复提示,基本都属于Service Client类定义成全局字段,事件的重复注册造成的。

不过我们可以通过一些办法来解决这个问题。这里总结了一下,供参考。

 一、取消Service Client类定义成全局字段,在每次使用时初始化,调用:

using(var myServiceClient = new MyServiceClient())

{

  myServiceClient.DoSomethingCompleted += (sender, args) =>
  {
        MessageBox.Show("Doodo");
  };
  myServiceClient.DoSomethingAsync();

}

二、定义成全局变量,仅在Load时或者构造函数内注册一次事件:

Public MyClass()

{

  myServiceClient.DoSomethingCompleted += new EventHandler<DoSomethingCompletedEventArgs>(myServiceClient_DoSomethingCompleted);

}

其他地方再用  myServiceClient.DoSomethingAsync();

三、执行时注册(+=),执行成功后取消注册(-=):

就是在myServiceClient_DoSomethingCompleted方法这里加入取消注册操作

    myServiceClient.DoSomethingCompleted -=

      new EventHandler<DoSomethingCompletedEventArgs>(myServiceClient_DoSomethingCompleted);

四、还有更猛的,定义成全局静态的,在Application_Startup时初始化,把所有事件执行一次初始化操作,这样对于一个应用程序只需做一次操作。

每次调用的时候,判断下连接状态Open、Close.

posted on 2011-03-17 22:47  欣静赏悦  阅读(459)  评论(0编辑  收藏  举报