Как реализовать WCF NetPeerTcpBinding PeerResolver - PullRequest
5 голосов
/ 20 февраля 2010

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

Итак, я пытаюсь реализовать свой собственный PeerResolver с использованием базы данных.

  • Метод Register вставляет строку с meshId, endpointUri и списком IP-адресов в базе данных вместе с созданной датой и возвращает вновь созданный идентификатор строки в качестве идентификатора регистрации.
  • Метод Unregister удаляет все из этого Guid.
  • Метод Update обновляет вышеупомянутую информацию.
  • Мой метод Resolve в настоящее время игнорирует параметр maxAddresses и возвращает всю информацию в базе данных для этого meshId.

Он работает довольно хорошо, как подтверждение концепции, но, поскольку документация в основном не существует, мне трудно решить, как управлять вещами. Например:

  • Что делать с параметром maxAddresses. В моем тестировании обычно вызывается со значением 3. Почему 3? Какие 3 я должен вернуть? Что произойдет, если все 3 сообщения, которые я верну, недоступны, но есть другие адреса? Будет ли это попробовать снова? И затем мне нужно убедиться, что при повторных попытках возвращаются другие 3? И как мне это сделать случайно? Или мне нужно иметь некоторую информацию в базе данных о том, как узел связан с другими узлами, а затем возвращать те, которые географически близки?
  • Если приложение мирно останавливается, оно вызывает Unregister, но это, очевидно, не всегда происходит. Как мне управлять очисткой?
  • Документация для всех переменных тайм-аута, похоже, указывает на то, что я должен выбросить TimeoutException, если предел достигнут без выполнения командой того, что она должна. Я вижу, как это было бы важно, если бы вы пытались подключиться через сеть к службе однорангового разрешения (например, PNRP), но, поскольку я использую свою локальную базу данных, я должен просто игнорировать эти значения?
  • Документация по свойству CanShareReferrals и перечислению PeerReferralPolicy дает очень очевидные описания значений, которые вы можете предположить по именам свойств и самим членам перечисления, но абсолютно не дает представления о том, что может повлиять на выбор одного из другого.

Мне бы понравилось, если бы был кто-то с большим опытом WCF, который мог бы пролить свет на эти проблемы.

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вы также можете использовать эту среду с открытым исходным кодом, которая значительно снижает накладные расходы при реализации распознавателя. Тогда вы можете сосредоточиться на написании менеджера хранилища вместо всей сантехники. Это также достаточно задокументировано.

http://wcfpeerresolver.codeplex.com/

1 голос
/ 28 февраля 2010

Как описано в MSDN Протокол разрешения имен одноранговых узлов Microsoft использует Teredo туннелирование для решения проблемы доступа IP6 / IP4.

Просто разрешите туннелирование Teredo для фермы серверов, это просто работает

...