Hola a todos.

Después de crear un wcf en Azure y de consumir un EndPoint interno que viaja por tcp, ahora procedemos a consumir dicho EndPoint interno desde una aplicación en un WebRole.

Para revisar el post anterior http://geeks.ms/rduarte/2016/03/13/comunicacin-interna-wcf-en-azure/

Lo primero es agregar una solución web de tipo Web Role, puede ser una aplicación tipo web forms o mvc.

image

Dicha aplicación le colocamos un EndPoint de entrada, para poder acceder a ella.

image

Creamos un botón con la siguiente funcionalidad.

[sourcecode language="csharp" padlinenumbers="true" htmlscript="false"]
protected void Button1_Click(object sender, EventArgs e)
		{
			try
			{
				var factory = new ChannelFactory<WcfWorker.IWorker>(new NetTcpBinding(SecurityMode.None));
				var current = RoleEnvironment.CurrentRoleInstance;
				var channel = factory.CreateChannel(GetRandomEndpoint());
				Label1.Text = channel.Say("Hola");
				
			}
			catch (Exception ex)
			{

				Label1.Text = ex.Message;
			}

			
		}
		private EndpointAddress GetRandomEndpoint()
		{
			var endpoints = RoleEnvironment.Roles["WcfWorker"].Instances.Select(i => i.InstanceEndpoints["InternalRest"].IPEndpoint).ToArray();
			var r = new Random(DateTime.Now.Millisecond);
			return new EndpointAddress(string.Format("net.tcp://{0}/InternalRest", endpoints[r.Next(endpoints.Count() - 1)]));
		}
[/sourcecode]

Para esta parte es importante saber que servicio es el que esta expuesto para uso interno. Revisen CreateServiceHost();

Ahora publicamos y probamos.

image

Bueno, espero que sea de utilidad este post.

Sl2

Romny