static void Main(string[] args) { // Create binding for the service endpoint. AmqpBinding amqpBinding = new AmqpBinding(); // Create ServiceHost. ServiceHost serviceHost = new ServiceHost(typeof(HelloService), new Uri[] { new Uri("http://localhost:8080/HelloService") }); // Add behavior for our MEX endpoint. ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior(); mexBehavior.HttpGetEnabled = true; serviceHost.Description.Behaviors.Add(mexBehavior); // Add MEX endpoint. serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), new BasicHttpBinding(), "MEX"); // Add AMQP endpoint. Uri amqpUri = new Uri("amqp:message_queue"); serviceHost.AddServiceEndpoint(typeof(IHelloService), amqpBinding, amqpUri.ToString()); serviceHost.Open(); Console.WriteLine(); Console.WriteLine("The service is ready."); Console.WriteLine("Press <ENTER> to terminate service."); Console.WriteLine(); Console.ReadLine(); if (serviceHost.State != CommunicationState.Faulted) { serviceHost.Close(); } }
protected override void OnApplyConfiguration(Binding binding) { if (binding == null) { throw new ArgumentNullException("binding"); } if (!(binding is AmqpBinding)) { throw new ArgumentException(string.Format("Invalid type for configuring an AMQP binding. Expected type: {0}. Type passed in: {1}.", typeof(AmqpBinding).AssemblyQualifiedName, binding.GetType().AssemblyQualifiedName)); } AmqpBinding amqpBinding = (AmqpBinding)binding; amqpBinding.BrokerHost = this.BrokerHost; amqpBinding.BrokerPort = this.BrokerPort; amqpBinding.TransferMode = this.TransferMode; amqpBinding.Shared = this.Shared; amqpBinding.PrefetchLimit = this.PrefetchLimit; AmqpSecurityMode mode = AmqpSecurityMode.None; if (this.Security != null) { mode = this.Security.Mode; } if (mode == AmqpSecurityMode.None) { if (amqpBinding.SecurityEnabled) { amqpBinding.Security.Mode = AmqpSecurityMode.None; } } else { amqpBinding.Security.Mode = AmqpSecurityMode.Transport; amqpBinding.Security.Transport.CredentialType = this.Security.Transport.CredentialType; amqpBinding.Security.Transport.IgnoreEndpointClientCredentials = this.Security.Transport.IgnoreEndpointCredentials; amqpBinding.Security.Transport.UseSSL = this.Security.Transport.UseSSL; if (this.Security.Transport.DefaultCredential != null) { amqpBinding.Security.Transport.DefaultCredential = new AmqpCredential( this.Security.Transport.DefaultCredential.UserName, this.Security.Transport.DefaultCredential.Password); } else { amqpBinding.Security.Transport.DefaultCredential = null; } } }
protected override void InitializeFrom(Binding binding) { base.InitializeFrom(binding); AmqpBinding amqpBinding = (AmqpBinding)binding; this.BrokerHost = amqpBinding.BrokerHost; this.BrokerPort = amqpBinding.BrokerPort; this.TransferMode = amqpBinding.TransferMode; this.Shared = amqpBinding.Shared; this.PrefetchLimit = amqpBinding.PrefetchLimit; if (!amqpBinding.SecurityEnabled) { this.Security = null; } else { if (this.Security == null) { this.Security = new AmqpSecurityElement(); } AmqpTransportSecurity sec = amqpBinding.Security.Transport; this.Security.Mode = AmqpSecurityMode.Transport; if (this.Security.Transport == null) { this.Security.Transport = new AmqpTransportSecurityElement(); } this.Security.Transport.CredentialType = sec.CredentialType; this.Security.Transport.IgnoreEndpointCredentials = sec.IgnoreEndpointClientCredentials; this.Security.Transport.UseSSL = sec.UseSSL; if (sec.DefaultCredential == null) { this.Security.Transport.DefaultCredential = null; } else { this.Security.Transport.DefaultCredential = new AmqpCredentialElement(); this.Security.Transport.DefaultCredential.UserName = sec.DefaultCredential.UserName; this.Security.Transport.DefaultCredential.Password = sec.DefaultCredential.Password; } } AmqpProperties props = amqpBinding.DefaultMessageProperties; }
private static void InitializeBinding() { AmqpBinaryBinding binding = new AmqpBinaryBinding(); bindingParameters = new BindingParameterCollection(); binding.BrokerHost = brokerAddr; binding.BrokerPort = brokerPort; binding.TransferMode = TransferMode.Streamed; binding.PrefetchLimit = 5000; binding.Shared = true; if (ssl || (userName != null)) { binding.Security.Mode = AmqpSecurityMode.Transport; binding.Security.Transport.UseSSL = ssl; if (userName != null) { binding.Security.Transport.CredentialType = AmqpCredentialType.Plain; ClientCredentials credentials = new ClientCredentials(); credentials.UserName.UserName = userName; credentials.UserName.Password = password; bindingParameters.Add(credentials); } } brokerBinding = binding; }