Я не могу использовать протокол разрешения имен в нашей сети, потому что маршрутизаторы нашей фермы серверов не будут поддерживать IPv6.
Итак, я пытаюсь реализовать свой собственный PeerResolver с использованием базы данных.
- Метод Register вставляет строку с meshId, endpointUri и списком IP-адресов в базе данных вместе с созданной датой и возвращает вновь созданный идентификатор строки в качестве идентификатора регистрации.
- Метод Unregister удаляет все из этого Guid.
- Метод Update обновляет вышеупомянутую информацию.
- Мой метод Resolve в настоящее время игнорирует параметр maxAddresses и возвращает всю информацию в базе данных для этого meshId.
Он работает довольно хорошо, как подтверждение концепции, но, поскольку документация в основном не существует, мне трудно решить, как управлять вещами. Например:
- Что делать с параметром maxAddresses. В моем тестировании обычно вызывается со значением 3. Почему 3? Какие 3 я должен вернуть? Что произойдет, если все 3 сообщения, которые я верну, недоступны, но есть другие адреса? Будет ли это попробовать снова? И затем мне нужно убедиться, что при повторных попытках возвращаются другие 3? И как мне это сделать случайно? Или мне нужно иметь некоторую информацию в базе данных о том, как узел связан с другими узлами, а затем возвращать те, которые географически близки?
- Если приложение мирно останавливается, оно вызывает Unregister, но это, очевидно, не всегда происходит. Как мне управлять очисткой?
- Документация для всех переменных тайм-аута, похоже, указывает на то, что я должен выбросить TimeoutException, если предел достигнут без выполнения командой того, что она должна. Я вижу, как это было бы важно, если бы вы пытались подключиться через сеть к службе однорангового разрешения (например, PNRP), но, поскольку я использую свою локальную базу данных, я должен просто игнорировать эти значения?
- Документация по свойству CanShareReferrals и перечислению PeerReferralPolicy дает очень очевидные описания значений, которые вы можете предположить по именам свойств и самим членам перечисления, но абсолютно не дает представления о том, что может повлиять на выбор одного из другого.
Мне бы понравилось, если бы был кто-то с большим опытом WCF, который мог бы пролить свет на эти проблемы.