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("https://{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();
...
}




0 commentaires