Esempio n. 1
0
        /// <summary>
        /// 截获从Client端发送的消息转发到目标终结点并获得返回值给Client端
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public Message ProcessMessage(Message requestMessage)
        {
            try
            {
                begintime();
                IRouterService  proxy = null;
                HeaderParameter para  = HeaderOperater.GetHeaderValue(requestMessage);

                if (RouterServerManage.routerDic.ContainsKey(para.routerid))
                {
                    proxy = RouterServerManage.routerDic[para.routerid];
                    para.replyidentify = RouterServerManage.headParaDic[para.routerid].replyidentify;
                }
                else
                {
                    //Binding binding = null;
                    EndpointAddress endpointAddress = null;
                    Uri             touri           = null;
                    para = RouterServerManage.AddClient(requestMessage, para, out endpointAddress, out touri);
                    requestMessage.Headers.To = touri;

                    IDuplexRouterCallback callback = OperationContext.Current.GetCallbackChannel <IDuplexRouterCallback>();
                    NetTcpBinding         tbinding = new NetTcpBinding("NetTcpBinding_WCFHandlerService");
                    DuplexChannelFactory <IRouterService> factory = new DuplexChannelFactory <IRouterService>(new InstanceContext(new DuplexRouterCallback(callback)), tbinding, endpointAddress);
                    proxy = factory.CreateChannel();

                    //缓存会话
                    RouterServerManage.routerDic.Add(para.routerid, proxy);
                    RouterServerManage.headParaDic.Add(para.routerid, para);
                }

                Message responseMessage = null;
                HeaderOperater.AddMessageHeader(requestMessage, para);//增加自定义消息头
                responseMessage = proxy.ProcessMessage(requestMessage);

                if (para.cmd == "Quit")
                {
                    //关闭连接释放缓存会话
                    RouterServerManage.RemoveClient(para);
                }

                double outtime = endtime();
                // 请求消息记录
                if (WcfServerManage.IsDebug)
                {
                    RouterServerManage.hostwcfMsg(Color.Black, DateTime.Now, String.Format("路由请求消息发送(耗时[" + outtime + "]):  {0}", requestMessage.Headers.Action));
                }


                return(responseMessage);
            }
            catch (Exception e)
            {
                return(Message.CreateMessage(requestMessage.Version, FaultCode.CreateReceiverFaultCode("error", RouterServerManage.ns), e.Message, requestMessage.Headers.Action));
            }
        }
        private void btnStop_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("您确定要停止服务吗?", "询问窗", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                try
                {
                    if (mAppHost != null)
                    {
                        WcfServerManage.StopWCFHost();
                        WcfServerManage.UnCreateSuperClient();
                        mAppHost.Close();
                        AddMsg(Color.Blue, DateTime.Now, "基础服务已关闭");
                    }

                    if (mRouterHost != null && mFileRouterHost != null)
                    {
                        mRouterHost.Close();
                        mFileRouterHost.Close();
                        RouterServerManage.Stop();
                        AddMsg(Color.Blue, DateTime.Now, "路由服务已关闭");
                    }

                    if (mFileHost != null)
                    {
                        mFileHost.Close();
                        AddMsg(Color.Blue, DateTime.Now, "文件传输服务已关闭");
                    }

                    if (webapiHost != null)
                    {
                        webapiHost.StopHost();
                        AddMsg(Color.Blue, DateTime.Now, "WebAPI服务已关闭");
                    }
                }
                catch
                {
                    if (mAppHost != null)
                    {
                        mAppHost.Abort();
                    }
                    if (mRouterHost != null)
                    {
                        mRouterHost.Abort();
                    }
                    if (mFileHost != null)
                    {
                        mFileHost.Abort();
                    }
                    if (webapiHost != null)
                    {
                        webapiHost = null;
                    }
                }
                RunState = HostState.NoOpen;
            }
        }
        private void StartRouterHost()
        {
            RouterServerManage.hostwcfMsg    = new HostWCFMsgHandler(AddMsg);
            RouterServerManage.hostwcfRouter = new HostWCFRouterListHandler(BindGridRouter);

            mRouterHost     = new ServiceHost(typeof(RouterHandlerService));
            mFileRouterHost = new ServiceHost(typeof(FileRouterHandlerService));

            RouterServerManage.Start();
            mRouterHost.Open();
            mFileRouterHost.Open();
            AddMsg(Color.Blue, DateTime.Now, "路由服务启动完成");
        }
Esempio n. 4
0
        /// <summary>
        /// 截获从Client端发送的消息转发到目标终结点并获得返回值给Client端
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public Message ProcessMessage(Message requestMessage)
        {
            try
            {
                //Binding binding = null;
                EndpointAddress endpointAddress = null;
                Uri             touri           = null;


                RouterServerManage.GetServiceEndpointFile(requestMessage, out endpointAddress, out touri);
                requestMessage.Headers.To = touri;


                NetTcpBinding tbinding = new NetTcpBinding("NetTcpBinding_FileTransferHandlerService");
                using (ChannelFactory <IFileRouterService> factory = new ChannelFactory <IFileRouterService>(tbinding, endpointAddress))
                {
                    factory.Endpoint.Behaviors.Add(new MustUnderstandBehavior(false));
                    IFileRouterService proxy = factory.CreateChannel();

                    using (proxy as IDisposable)
                    {
                        // 请求消息记录
                        IClientChannel clientChannel = proxy as IClientChannel;
                        if (WcfServerManage.IsDebug)
                        {
                            RouterServerManage.hostwcfMsg(Color.Black, DateTime.Now, String.Format("路由请求消息发送:  {0}", clientChannel.RemoteAddress.Uri.AbsoluteUri));
                        }
                        // 调用绑定的终结点的服务方法
                        Message responseMessage = proxy.ProcessMessage(requestMessage);

                        return(responseMessage);
                    }
                }
            }
            catch (Exception e)
            {
                return(Message.CreateMessage(requestMessage.Version, FaultCode.CreateReceiverFaultCode("error", RouterServerManage.ns), e.Message, requestMessage.Headers.Action));
            }
        }