2013-11-23 2 views
1

Моя служба работает в настоящее время наКак клиент может знать, работает ли служба wcf?

localhost:17722/Book.svc 

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

+0

Какое обязательное использование вы используете? – ilansch

+0

@ilansch wsHttpBinding – user2783193

ответ

5

Не проверять, если сервер запущен перед употреблением его. Потребляйте службу и обрабатывайте любые ошибки, возникающие во время вызова.

Даже если вы проверите, что служба установлена, она может опуститься между временем, когда вы проверяете, что она установлена, и вы вызываете эту услугу. Поэтому, даже если вы проверяете, что все встало, вам все равно придется обращаться с ним, когда вы его потребляете.

Лучший способ проверить, работает ли служба, попытаться ее использовать.

+0

«..используемый сервис ** перед тем, как попытаться его использовать **« – MikroDel

+0

, и вы предлагаете его использовать :) – MikroDel

+0

@MikroDel - моя точка - лучший способ рассказать, работает ли служба, попробовать чтобы потреблять его. – shf301

5

только своего рода пинг

, но без гарантии, что после того, как вы пинг было нормально услуга будет не падает на порядок до вашего реального запроса

Резюмируя:

Приготовьте вы Клинт к обрабатывать мертвые службы, ошибки и т. д.

1

Ну, это невозможно, пока вы не попробуете службу (или пинг сервера). Вызов вашего веб-сервиса из вашего клиентского приложения - это вызов любого другого веб-сервиса, как вы можете узнать, что веб-служба google работает до ее потребления?

Как только у меня возникла аналогичная проблема, и я просто выставляю операцию, которая возвращает «что-то» (например, return true), которую я звонил, чтобы узнать, было ли «прикладное» приложение сервера «ожиданным» и «ошибка времени» или «500» когда не работает.

4

В этой ситуации я применил бы принципал Tell, don't ask. Просто попробуйте выполнить любую операцию, которую вы намеревались делать, а затем обработайте исключение, если оно не выполнено.

Зачем нужна ваша программа для обслуживания, если это не было необходимо для работы программы?

Hey service, can I invoke your 'X' method? ... no? ... okay, I didn't want to anyway :P

1

Установите манекен в svc, который возвращает bool или что-то в этом роде. Затем нажмите на фоновый поток с заданным интервалом. Если время ожидания запроса, вы можете обработать таймаут, показывая что-то, что говорит о том, что услуга недоступна.

Смежные вопросы