public void HostService() { ServiceHost host = null; try { DirectMethodHandler form = new DirectMethodHandler(); string uriAddressString = null; string ports = ConfigurationManager.AppSettings["rangeOfPorts"]; int[] rangeOfPorts = string.IsNullOrEmpty(ports) ? new int[] { 20100, 20101, 20102, 20103, 20104, 20105, 20106, 20107, 20108, 20109 } : ports.Split(',').Select(n => Convert.ToInt32(n)).ToArray(); var usedPorts = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners(); for (int ii = 0; ii < rangeOfPorts.Length; ii++) { if (usedPorts.FirstOrDefault(p => p.Port == rangeOfPorts[ii]) == null) { uriAddressString = string.Format(@"http://localhost:{0}/sb", rangeOfPorts[ii]); break; } } ; if (string.IsNullOrEmpty(uriAddressString)) { throw new Exception("Not available port in the range 10100-10109"); } // interprocess communications var endpointAddress = new EndpointAddress(baseHostUrl + Process.GetCurrentProcess().Id); var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None); var se = new ServiceEndpoint(ContractDescription.GetContract(typeof(IGenericOneWayContract)), binding, endpointAddress); host = new ServiceHost(typeof(TesterService)); host.AddServiceEndpoint(se); host.Extensions.Add(form); host.Open(); } catch (Exception ex) { throw; } }
public void ProcessMessage(Message message) { Trace.WriteLine("TesterService: === Message has been received ==="); Trace.WriteLine(message.ToString()); DirectMethodHandler form = OperationContext.Current.Host.Extensions.Find <DirectMethodHandler>(); string action = OperationContext.Current.IncomingMessageHeaders.Action; int indexConfig = message.Headers.FindHeader(ConfigData.XName.LocalName, ConfigData.XName.NamespaceName); try { var config = message.Headers.GetHeader <ConfigData>(indexConfig); message.Headers.RemoveAt(indexConfig); var payload = JsonConvert.DeserializeObject <MqttMsgEventArgs>(message.GetBody <string>()); form.ProcessMessage(payload, config); } catch (Exception ex) { throw ex; } }