/// <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, "路由服务启动完成"); }
/// <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)); } }