Многофакторная проблема клиента WCF - PullRequest
0 голосов
/ 01 декабря 2010

Моя проблема - события от клиента WCF.Я передаю объект client некоторым классам.И в этих классах я создал события.Если я создал в разных классах одно и то же событие, оно срабатывает много раз.Я хочу, чтобы в классе, где я вызываю WCF, запускалось только событие.

Как я могу решить проблему?Только удалить каждое событие после завершения?

Sry за мой английский;)

Спасибо ....

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

хорошо, извините.

Я добавил WCF в список ссылок на услуги в клиентском проекте.Затем я создал экземпляр из Webservice Client:

private WServiceClient _client = new WService.WServiceClient();

Я передаю этот объект нескольким классам.В этих классах я создаю полные события из некоторых методов из WCF (асинхронные вызовы).Например:

_client.AddNumber += new EventHandler<AddNumberCompletedEventArgs>(_client_AddNumberCompleted);

        void _client_AddNumberCompleted(object sender, AddNumberCompletedEventArgs e)
        {

        }

Проблема в том, что я использую несколько методов в разных классах, я создаю более одного завершенного события.Если полное событие сработало, все событие сработало во всех классах.Я хочу, чтобы это было только событие, которое было в классе, где был сделан вызов.

Я надеюсь, вы понимаете мое описание.

Обновление:

Я решаю свою проблему с удалением события из обработчика событий в Завершенном событии.

1 голос
/ 01 декабря 2010

Привет Я не очень хорошо понимаю ваш вопрос, но постараюсь ответить так же, как и я. Когда вы ссылаетесь на службу WCF, в клиентском проекте будут сгенерированы прокси-классы. Эти прокси-классы совместно используют один и тот же интерфейс члена данных, который находится на стороне сервера, но не поведение. Так, например, все свойства будут доступны из клиента, но не события, методы и так далее. Может быть, вы можете написать, что вы пытаетесь достичь, и мы можем помочь?

Обновление


Хорошо, теперь я думаю, что понимаю. Ну, это решение для удаления каждого события, которое не должно запускаться перед выполнением метода AddNumber. Другое решение - отслеживать вызовы классов. например

public static ArrayList eventObjects = new ArrayList(); //Declare a global array list which will be accessible from all classes

eventObjects.Add(this); //Before calling AddNumber method
_client.AddNumber += new EventHandler<AddNumberCompletedEventArgs>(_client_AddNumberCompleted);
void _client_AddNumberCompleted(object sender, AddNumberCompletedEventArgs e)
{
     if(ar.Contains(this))
     {
         //Do what you want to do here. Other classes will receive this event too, but they will not react.
         eventObjects.Remove(this);
     }
}

Однако я должен предупредить вас, что это не лучший подход. Я не могу предложить вам лучший способ, потому что я не знаю, чего вы пытаетесь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...