Как позвонить в службу, когда приложение SilverLight OOB закрывает - PullRequest
0 голосов
/ 24 октября 2010

Мне нужно вызвать службу WCF для обновления при выходе из приложения SilverLight.это приложение вне браузера, и я использую SL4.

Так как WCF в SL работает только асинхронно, это невозможно сделать на Application.Exit

Я пробовал также MainWindow.Closing, который доступен для OOB, но он также не работал

Пытался заставить функцию закрытия ждать обратного вызова WCF Completed с использованием блокировки потоков, но он просто зависал.

Есть идеи?

Шахар

1 Ответ

0 голосов
/ 25 октября 2010

Сохраните данные и отправьте при следующем запуске

Вызов службы при выходе - сложная функция, независимо от того, на какой платформе вы находитесь. Вы не можете гарантировать, что это произойдет, потому что ваш процесс может завершиться до того, как ваш вызов будет выполнен по ряду причин (диспетчер задач, logff, завершение работы, синий экран и т. Д.). Если вы пишете важные данные, например последнюю запись в серии, вы открываете себя в лучшем случае для неполных наборов данных, а в худшем - для поврежденных данных.

Лучше, если все ваши серверные коммуникации выполняются в виде единовременных транзакций. Если данные, которые вы отправляете при выходе, предназначены для ведения журналов или для метрик (например, как долго приложение запускалось, сколько раз вызывалось «foo»), лучшим вариантом будет непрерывное сохранение ваших данных на диск, а затем выполнять вычисления отправьте данные при следующем запуске приложения.

...