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