2010-02-19 9 views
5

No puedo usar el Protocolo de resolución de nombre de igual en nuestra red porque los enrutadores de nuestra granja de servidores no son compatibles con IPv6.Cómo implementar un WCF NetPeerTcpBinding PeerResolver

Por lo tanto, estoy intentando implementar mi propio PeerResolver usando una base de datos.

  • El método Registro inserta una fila con el meshId, endpointUri, y la lista de direcciones IP en la base de datos junto con una fecha de creación, y devuelve una fila recién creada GUID que el ID de registro.
  • El método Unregister elimina todo de esa Guid.
  • El método de actualización actualiza la información antes mencionada.
  • El método My Resolve actualmente IGNORA el parámetro maxAddresses y devuelve toda la información en la base de datos para ese meshId.

Está funcionando bastante bien como una prueba de concepto, pero como la documentación es básicamente inexistente, me está costando mucho decidir cómo manejar las cosas. Por ejemplo:

  • Qué hacer con el parámetro maxAddresses. En mi prueba, por lo general, parece ser llamado con un valor de 3. ¿Por qué 3? ¿Qué 3 debería devolver? ¿Qué sucede si los 3 que devuelvo no están disponibles pero hay otras direcciones que sí? ¿Intentará de nuevo? ¿Y luego debo asegurarme de que se devuelvan 3 diferentes cuando se vuelva a intentar? ¿Y cómo debería hacerlo, al azar? ¿O necesito tener alguna información en la base de datos sobre cómo un nodo está conectado a otros nodos y luego devolver los que están geográficamente cercanos?
  • Si una aplicación se detiene pacíficamente, se llamará Anular registro, pero esto, obviamente, no siempre sucede. ¿Cómo administro la limpieza?
  • La documentación para todas las variables de tiempo de espera parece indicar que debería lanzar una TimeoutException si se alcanza el límite sin que el comando haga lo que se supone que debe. Puedo ver cómo esto sería importante si intentas conectarte a través de una red a un servicio de resolución de pares (como PNRP) pero como estoy usando mi base de datos local, ¿debería simplemente ignorar esos valores?
  • La documentación para la propiedad CanShareReferrals y la enumeración PeerReferralPolicy proporcionan descripciones muy obvias de los valores que se pueden suponer a partir de los nombres de la propiedad y los miembros de la enumeración, pero no ofrecen ninguna idea de lo que sería necesario para elegir uno.

Me encantaría que hubiera alguien con mucha experiencia en WCF que pudiera arrojar algo de luz sobre estos temas.

+1

no creo NetPeerTcpBinding es un buen partido para una granja de servidores, ¿por qué estás tratando de usarlo. –

+0

Creo que sería interesante tener procesos en servidores que puedan comunicar el estado entre sí por una miríada de razones, sin embargo, eso es realmente irrelevante. La pregunta es acerca de cómo implementar un PeerResolver cuando PNRP (por cualquier razón) no es una opción. –

Respuesta

1

Según lo documentado en MSDN El protocolo de resolución de nombres de pares de Microsoft utiliza el túnel Teredo para resolver el problema de acceso IP6/IP4.

Simplemente permitan túnel Teredo para la granja de servidores, simplemente funciona

+0

La pregunta es "Cómo implementar un WCP NetPeerTcpBinding PeerResolver", no "Cómo EVITAR la implementación de un WCF NetPeerTcpBinding". –

+0

Basado en "Me encantaría que hubiera alguien con mucha experiencia en WCF que pudiera arrojar algo de luz sobre estos temas". ¡Respondí! Pasamos una eternidad tratando de hacer nuestras propias relaciones públicas (contra los buenos consejos) y al final acabamos de utilizar Teredo – TFD

+0

Esa información es útil, ¡gracias! Es muy frustrante que Microsoft ofrezca esta clase base abstracta que prácticamente grita "¡Implementame!" con básicamente cero información sobre las mejores prácticas para una implementación. –

1

También puede utilizar este marco de código abierto que reduce una gran cantidad de los gastos generales de la aplicación de un dispositivo de resolución. Luego puede concentrarse en escribir el administrador de almacenamiento en lugar de todas las tuberías. También está bastante documentado.

http://wcfpeerresolver.codeplex.com/

Cuestiones relacionadas