2009-12-01 1 views
0

Я использую ws-discovery в .NET 4.0, и он работает хорошо. Один из вопросов, который у меня есть, - это как работать с службами, которые не работают. Например, скажем, у меня есть IService на сервере A и сервере B. Предположим, что эта служба на сервере A сломана (имитируйте это, остановив Application Pool). Ваш клиент все равно найдет 2 службы, поэтому, когда вы пытаетесь использовать эту услугу, вы не можете гарантировать, что она работает..net 4 ws-discovery endpoints

Итак, мой вопрос в том, справляетесь ли вы с этим, перебирая конечные точки, и если первый из них не работает, попробуйте следующий. Или есть способ получить только сервисы, которые «вверх» на момент поиска? Или я отсутствует точка где-то - вполне возможно :-)

Благодаря

+0

Вы спрашиваете, что происходит с клиентом, когда он обнаруживает только некоторые из необходимых ему услуг? Или у вас есть несколько сервисов с одним и тем же интерфейсом? –

ответ

0

Я нашел, что это общая проблема открытия ФОС. Аналогичная проблема возникает, когда сервер находится в двух сетях. Это открытие вернет оба nic-адреса, но, конечно, клиент может достичь только сервера через одну из этих сетей.

Обходной путь, который я использовал, заключается в добавлении функции «void Ping()» к серверу. Затем после обнаружения клиент пытается вызвать эту функцию «Ping()» на всех обнаруженных конечных точках. Те, которые возвращают ответ, хороши, другие плохи.

Я закончил тем, что сделал этот шаг дальше и породил поток, который по-прежнему вызывает эту функцию «Ping()». Затем, когда хороший сервер исчезает, поток удаляет этот uri из коллекции «хорошего» ури.

Я чувствую вашу боль.