Может ли несколько WebClient мешать друг другу? - PullRequest
0 голосов
/ 01 сентября 2010

Я должен создать приложение, которое будет использовать Webclient несколько раз, чтобы получать каждые t-секундные данные с сервера.

Вот небольшой план, чтобы показать вам, что я делаю в моем приложении:

  1. Подключитесь к веб-клиенту "USER_LOGIN", который возвращает мне GUID (уникальный идентификатор пользователя). Я сохраняю его и сохраняю для использования в будущих вызовах веб-клиента.
  2. Подключитесь к веб-клиенту "USER_GETINFO", используя GUID, который я сохранил ранее в качестве параметра. Эта веб-служба возвращает массив строк, содержащих всю мою личную информацию о пользователе (мое имя, возраст, адрес электронной почты и т. Д.). => Я сохраняю информацию о массиве следующим образом: Textblock.Text = e.Result [2].
  3. Запуск Dispatcher.Timer с 2-х секундной отметкой, чтобы запустить мой цикл. (Цель этого - получить информацию и обновлять ее каждые 2 секунды)
  4. Подключитесь к веб-клиенту «USER GETFRIEND», который находится в моем таймере, предоставив ему GUID в качестве параметра. Он возвращает мне массив, заполненный информацией о моих друзьях (имя, адрес электронной почты, сообщение и т. Д.). Я вставил этот веб-клиент в таймер, чтобы мой список друзей обновлялся каждые 2 секунды.

Я могу создать все шаги без каких-либо ошибок до шага 3. Когда я вызываю веб-клиент "USER_GETFRIEND", я сталкиваюсь с двумя основными проблемами:

  • С одной стороны я заметил, что мое количество нитей резко увеличилось. => Я всегда думал, что когда WebClient завершит выполнение своих инструкций, он сам отключится, но, очевидно, этого не происходит в асинхронных вызовах.

  • И с другой стороны, я был удивлен, увидев, что при использовании одного и того же прокси для двух вызовов Webclient (т. Е. Если я объявляю test.MainSoapClient proxy = new test.MainSoapClient ()), данные, из которых я получу «USER_GETFRIEND» e.Result, был отправлен прямо в мой массив «USER_GETINFO». И поэтому мои имена и адреса электронной почты в пользовательском интерфейсе были заменены на одно и то же значение в массиве USER_GETFRIEND. Поэтому мое имя изменилось на электронную почту моих друзей и так далее ...

Я хотел бы знать, возможно ли закрыть вызов WebClient (или Thread), который я больше не использую, чтобы предотвратить какие-либо конфликты? Или, если у кого-то есть какие-либо предложения относительно моего кода и способа разработки приложения, не стесняйтесь предлагать.

1 Ответ

0 голосов
/ 21 сентября 2010

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

Вся моя проблема заключалась в том, что я не отписывался от своих асинхронных вызовов и использовал тот же прокси-класс из «Добавить ссылку на службу»:

Итак, когда я использовал:

proxy.webservice += new Eventhandler<whateverinhere>(my_method);

Я никогда не делал:

proxy.webservice -= new Eventhandler<whateverinhere>(my_method);

Надеюсь, это кому-нибудь поможет.

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