예제 #1
0
        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;
            }
        }
예제 #2
0
        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;
            }
        }