El enfoque sería el mismo, ya sea en las funciones Web Role o Worker Role, ya que ambas son esencialmente Windows 2008 Server (solo que Web Roles tiene IIS ejecutándose, lo que también consume algunos puertos). Independientemente del puerto en el que desee que se cuelguen sus servicios wcf, simplemente defínalos como Puntos finales de entrada (un punto final por puerto) y también decida qué rol maneja ese punto final.
Mientras tenga puertos disponibles, puede tener varios ServiceHosts. Actualmente tiene un límite de 25 puntos finales de entrada totales y 25 puntos finales internos totales por implementación, por lo que este es su límite absoluto. Por supuesto, si habilita RDP, el recuento de puertos disponibles se reduce. Oh, con respecto a los protocolos: si quería tanto http como tcp, necesitaría definir dos puntos finales, ya que el protocolo se define con la definición del punto final.
Endpoint interno Los servicios de WCF son prácticamente idénticos, pero puede eliminar la seguridad e ir con net.tcp para una transferencia rápida. Una diferencia en el balance de carga sin embargo:
- un servicio WCF que cuelga en una entrada de punto final será la carga balanceada a través de todos ejemplo de un papel
- un servicio WCF que cuelga en un punto final Interna no ser carga -equilibrado.
Para el último caso: supongamos que su función Web necesita hablar con el servicio WCF de la función Worker en Endpoint interno. Necesitaría enumerar todas las instancias, obtener el puerto IP + de cada una, luego seleccionar una al azar (o round-robin, o el método que elija).He aquí un método de muestreo que devuelve una instancia aleatoria punto final de una función dada y el nombre del punto final determinado (código tomado de Michael Washam de blog):
private String GetRandomServiceIP(String roleName, String endPointName)
{
var endpoints = RoleEnvironment.Roles[roleName].Instances.Select(i => i.InstanceEndpoints[endPointName]).ToArray();
var r = new Random(DateTime.Now.Millisecond);
int ipIndex = r.Next(endpoints.Count());
return endpoints[ipIndex].IPEndpoint.Address.ToString();
}
En cuanto a la configuración del servicio WCF y relacionado URI, estaría fuertemente sugiera que tome el último Windows Azure Training Kit y pase por el Laboratorio de comunicación de roles de trabajo, que incluye muchos detalles sobre la configuración de un ServiceHost, con puntos finales de entrada y puntos finales internos.
Veo lo que dices. Si puedo preguntar algunos más, ¿cómo podría iterar a través de todas las instancias? ¿Puedes nombrar la clase? Además, no veo ninguna propiedad que me ayude a distinguir entre punto final interno y externo en la clase 'RoleInstanceEndpoint' – Alwyn
He editado mi respuesta para mostrar una muestra de la enumeración de un punto final de un rol. Necesitará conocer sus nombres de punto final: nada específico le indica si es un punto final interno o de entrada. –
Gracias eso es lo que estaba buscando. ¡Aprecio tu tiempo! – Alwyn