2013-04-28 5 views
1

Могу ли я использовать Proxy.Open() как указание на то, должно ли соединение работать или нет? Я хотел бы проверить, действительно ли соединение доступно, а затем, если его нет, я не буду звонить в службу во время запуска приложения.Как проверить, доступна ли служба WCF?

Примечание. Мне нужно только проверить подключение, а не обязательно и весь клиент-сервис в оба конца.

Я закончил создание методов Ping() в службе, как было предложено.

FYI, используя просто Open(), просто не сработало - Open() не создает никаких исключений, даже если служба находится в автономном режиме!

+0

Я всегда добавляю метод do-nothing 'Ping' к моим услугам и вызываю этот метод, прежде чем делать какое-либо реальное общение. Мне было бы интересно узнать, есть ли встроенные альтернативы. – dasblinkenlight

+1

Это может сказать вам, можете ли вы открыть соединение ** прямо сейчас ** - но через 5 миллисекунд ваш фактический вызов все равно может выйти из строя. Просто нет смысла пытаться * проверить * это - вы не получите никакой полезной информации из этого. Вы просто ** должны быть готовы к любому вызову WCF для отказа - и обрабатывать его соответствующим образом –

ответ

2

Учитывая, что существует очень много переменных, влияющих на успех вызова службы WCF, я стараюсь добавить метод Docky Void KnockKnock() к услугам, чтобы иметь реальное доказательство, если соединение работает.

Этот метод также может служить двойной целью: вы можете назвать его асинхронным, чтобы уведомить сервер о том, что он должен быть подготовлен к входящим запросам. (Только начальный запуск службы может занять некоторое время.) Вызывая метод KnockKnock(), сервер может начать загрузку службы и дать вашим клиентам лучшую начальную производительность ответа.

+0

Спасибо, см. Мое добавленное примечание, как вы думаете, Open() будет делать для простой проверки соединения? –

+1

Он откроет сетевое подключение к вашему серверу - и после успеха установите для свойства State значение «Opened». Таким образом, вы можете проверить текущее сетевое соединение, но это не гарантирует, что служба будет запущена. (Потому что Open() не будет запускать службу.) -> Я просто хотел бы использовать фиктивный метод. – IsNull

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