void InitRemoting()//初始化remoting { try { BinaryServerFormatterSinkProvider sinkProvider = new BinaryServerFormatterSinkProvider(); ClientIPServerSinkProvider IPProvider = new ClientIPServerSinkProvider();//创建SINK IPProvider.Next = sinkProvider; Remotingserver = new TcpServerChannel(DateTime.Now.ToString(), int.Parse(ConfigurationManager.AppSettings["RMPORT"].ToString()), IPProvider); ChannelServices.RegisterChannel(Remotingserver, false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteService), "RemoteService", WellKnownObjectMode.SingleCall); Remotingserver.StartListening(null); AddListStatus("Remoting->服务已启动......"); AddListStatus("Remoting->服务IP: " + Dns.GetHostAddresses(Dns.GetHostName())[0].ToString() + " ,端口:" + ConfigurationManager.AppSettings["RMPORT"].ToString() + ",服务启动成功! "); listBox_Status.Items.Add(""); DB_CaChe.OnCallEvent += new DB_CaChe.CallEvevt(DB_CaChe_OnCallEvent); DB_CaChe.OnRefrshCaChe += new DB_CaChe.RefrshCaChe(DB_CaChe_OnRefrshCaChe); } catch (Exception ex) { if (ex.Message.IndexOf("端口") != 0) { MessageBox.Show("客户端连接了端口,无法释放!程序将自动重新启动!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Restart(); } } }
private void Receiver(object state) { var pipeline = new Pipeline(); pipeline.Push(new NboFrameLengthSink(2) { IncludeHeaderLength = false, MaxFrameLength = 1024 }); pipeline.Push( new MessageFormatterSink(new Iso8583MessageFormatter((@"..\Formatters\Iso8583Bin1987.xml")))); var ts = new TupleSpace <ReceiveDescriptor>(); var server = new TcpServerChannel(new Pipeline(), new ClonePipelineFactory(pipeline), ts, new FieldsMessagesIdentifier(new[] { 11, 41 })) { Port = 8583, LocalInterface = (string)state, Name = "ISO8583Server" }; server.StartListening(); while (!_stop) { ReceiveDescriptor rcvDesc = ts.Take(null, 100); if (rcvDesc == null) { continue; } _requestsCnt++; var message = rcvDesc.ReceivedMessage as Iso8583Message; if (message == null) { continue; } Iso8583Message response; if (message.IsAuthorization()) { Console.WriteLine("go to handle sale msg"); Sale auth = new Sale(message); response = auth.GetMessage(); } else if (message.IsNetworkManagement()) { Console.WriteLine("go to handle logon msg"); Logon logon = new Logon(message); logon.BuildResponse(); response = logon.GetMessage(); Console.WriteLine(response.ToString()); } else { response = null; } //message.SetResponseMessageTypeIdentifier(); //message.Fields.Add(Field39ResponseCode, "00"); var addr = rcvDesc.ChannelAddress as ReferenceChannelAddress; if (addr == null) { continue; } var child = addr.Channel as ISenderChannel; if (child != null) { child.Send(response); } } // Stop listening and shutdown the connection with the sender. server.StopListening(); }