2010-02-19 1 views
5

Я не могу использовать протокол разрешения имен пэра в нашей сети, потому что наши маршрутизаторы фермы серверов не поддерживают 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, который мог пролить свет на эти проблемы.

+1

Я не думаю, что NetPeerTcpBinding хороший матч для фермы серверов, почему вы пытаетесь использовать его. –

+0

Я думаю, было бы интересно иметь процессы на серверах, которые могут передавать статус друг другу по множеству причин, однако это действительно неуместно. Вопрос заключается в том, как реализовать PeerResolver, когда PNRP (по какой-либо причине) не является вариантом. –

ответ

1

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

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

+0

Вопрос: «Как реализовать WCF NetPeerTcpBinding PeerResolver», а не «Как избавиться от реализации WCF NetPeerTcpBinding». –

+0

Основано на «Мне было бы очень приятно, если бы там был кто-то с большим количеством опыта WCF, который мог бы пролить свет на эти проблемы». Я ответил! Мы потратили годы, пытаясь сделать свой собственный PR (против хорошего совета), и в итоге мы только что использовали Teredo – TFD

+0

Эта информация полезна - спасибо! Очень расстраивает то, что Microsoft предоставляет этот абстрактный базовый класс, который практически кричит «Реализуйте меня!». с практически нулевой информацией о передовом опыте реализации. –

1

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

http://wcfpeerresolver.codeplex.com/