Il se peut que l’on soit amené pour diverse raisons à héberger un service web sur un Worker Role.
Pour ce faire, il faut créer une interface (nommée « IService » pour l’exemple) qui va définir l’ensemble des méthodes que le service WCF doit exposer.
Créer ensuite une classe (nommée « ServiceImplementation » pour l’exemple) qui implémente cette interface.
Pour exposer les méthode en http, il ne reste plus qu’à configurer un EndPoint dans la méthode OnStart() du worker Role comme suit :
public override bool OnStart() { ... // Récupération du Endpoint configuré dans le « ServiceDefinition.csdef » RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WCFEndpoint"]; // Formatage de l’URL du service WCF string endpoint = String.Format("http://{0}/service.asmx", externalEndPoint.IPEndpoint); // Configuration du EndPoint serviceHost = new ServiceHost(typeof(ServiceImplementation), new Uri[] { new Uri(endpoint) }); serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true }); serviceHost.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(BasicHttpSecurityMode.None), ""); // Ajout de la publication des meta-donnée var useHeaderForMeta = new UseRequestHeadersForMetadataAddressBehavior(); useHeaderForMeta.DefaultPortsByScheme.Add("http", externalEndPoint.IPEndpoint.Port); serviceHost.Description.Behaviors.Add(useHeaderForMeta); serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); // Ouverture du service serviceHost.Open(); ... }