L'approccio sarebbe lo stesso, sia su istanze di ruolo Web o ruolo di lavoro, poiché entrambi sono essenzialmente Windows 2008 Server (solo che i ruoli Web hanno IIS in esecuzione, che consuma anche alcune porte). Indipendentemente dalla porta su cui desideri appendere i servizi wcf, è sufficiente definirli come endpoint di input (un endpoint per porta) e decidere anche quale ruolo gestisce quell'endpoint.
Finché sono disponibili porte, è possibile disporre di più ServiceHosts. Attualmente sei limitato a 25 endpoint di input totali e 25 endpoint interni totali per distribuzione, quindi questo è il tuo limite assoluto. Ovviamente, se abiliti RDP, il numero di porte disponibili diminuisce. Oh: per quanto riguarda i protocolli: se si desidera sia http e tcp, è necessario definire due endpoint, in quanto il protocollo è definito con la definizione di endpoint.
I servizi WCF dell'endpoint interno sono praticamente identici, ma è possibile eliminare la sicurezza e utilizzare net.tcp per un trasferimento rapido. Una differenza di bilanciamento del carico però:
- un servizio WCF appeso su un ingresso Endpoint sarà carico bilanciato in tutte esempio di un ruolo
- un servizio WCF appeso su un endpoint interno sarà non essere carico -equilibrato.
Per il secondo caso: diciamo che il tuo ruolo Web deve comunicare con il servizio WCF del ruolo di lavoro su endpoint interno. Dovresti enumerare tutte le istanze, ottenere la porta IP + di ciascuna, quindi selezionarne una a caso (o round-robin, o qualunque metodo tu scelga).Ecco un metodo di esempio che restituisce un'istanza casuale endpoint da un determinato ruolo e nome dell'endpoint (codice preso in prestito da Michael Washam di 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();
}
Per quanto riguarda la configurazione del servizio WCF e legato URI, avrei fortemente suggerire di afferrare l'ultimo Windows Azure Training Kit e di camminare attraverso il laboratorio di comunicazione Worker Role, che contiene molti dettagli sull'impostazione di un ServiceHost, con endpoint di input e endpoint interni.
fonte
2012-05-25 03:07:32
Vedo cosa stai dicendo. Se potessi chiederne qualcun altro, come potrei ripetere tutte le istanze? Puoi nominare la classe? Inoltre non vedo alcuna proprietà che possa aiutarmi a distinguere tra endpoint interno e esterno nella classe 'RoleInstanceEndpoint' – Alwyn
Ho modificato la mia risposta per mostrare un esempio di enumerazione di un endpoint di un ruolo. Dovrai conoscere i nomi dei tuoi endpoint - nulla di specifico ti dice se l'endpoint interno o di input. –
Grazie, è quello che stavo cercando. Apprezzo il tuo tempo! – Alwyn