private void ReceiveTryMessages(TimeSpan channelAcceptTimeout, TimeSpan messageReceiveTimeout) { IChannelListener <IInputChannel> listener = Util.GetBinding().BuildChannelListener <IInputChannel>(this.endpoint, new BindingParameterCollection()); listener.Open(); IInputChannel inputChannel = listener.AcceptChannel(channelAcceptTimeout); IAsyncResult channelResult = inputChannel.BeginOpen(channelAcceptTimeout, null, null); Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); inputChannel.EndOpen(channelResult); IAsyncResult[] resultArray = new IAsyncResult[MessageCount]; for (int i = 0; i < MessageCount; i++) { resultArray[i] = inputChannel.BeginTryReceive(messageReceiveTimeout, null, null); } for (int j = 0; j < MessageCount; j++) { Message tempMessage; Assert.True(inputChannel.EndTryReceive(resultArray[j], out tempMessage), "Did not successfully receive message #{0}", j); } inputChannel.Close(); listener.Close(); }
static void Main(string[] args) { try { //建立和发送端相同的通道栈 BindingElement[] bindingElements = new BindingElement[3]; bindingElements[0] = new TextMessageEncodingBindingElement();//文本编码 //oneWayBindingElement() 传输通道支持数据报模式 bindingElements[1] = new OneWayBindingElement(); bindingElements[2] = new NamedPipeTransportBindingElement();//命名管道 CustomBinding binding = new CustomBinding(bindingElements); //建立ChannelListner倾听者,接收数据 IChannelListener <IInputChannel> listener = binding.BuildChannelListener <IInputChannel>(new Uri("net.pipe://localhost/InputService"), new BindingParameterCollection()); listener.Open();//打开ChannelListner IInputChannel inputChannel = listener.AcceptChannel(); //创建IInputChannel inputChannel.Open(); //打开IInputChannel Console.WriteLine("开始接受消息.."); Message message = inputChannel.Receive(); //接受并打印 Console.WriteLine($"接收一条消息,action为{message.Headers.Action},Body为{message.GetBody<string>()}"); message.Close(); //关闭消息 inputChannel.Close(); //关闭通道 listener.Close(); //关闭监听器 Console.Read(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.Read(); } }
public virtual void Close() { if (_stared) { _inputChannel.Close(); } }
static void Main(string[] args) { try { //建立和发送端相同的通道栈 BindingElement[] bindingElements = new BindingElement[3]; bindingElements[0] = new TextMessageEncodingBindingElement(); bindingElements[1] = new OneWayBindingElement(); bindingElements[2] = new HttpTransportBindingElement(); CustomBinding binding = new CustomBinding(bindingElements); //建立ChannelListner IChannelListener <IInputChannel> listener = binding.BuildChannelListener <IInputChannel>(new Uri("http://localhost/InputService"), new BindingParameterCollection()); listener.Open(); //创建IInputChannel IInputChannel inputChannel = listener.AcceptChannel(); inputChannel.Open(); Console.WriteLine("开始接受消息。。。"); //接受并打印消息 Message message = inputChannel.Receive(); Console.WriteLine("接受到一条消息,action为:{0},body为:{1}", message.Headers.Action, message.GetBody <String>()); message.Close(); inputChannel.Close(); listener.Close(); Console.Read(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { Console.Read(); } }
private void ReceiveMessage <TObjectType>(TObjectType objectToMatch, AmqpProperties expectedProperties) { Uri receiveFromUri = new Uri("amqp:message_queue"); IChannelListener <IInputChannel> listener = Util.GetBinding().BuildChannelListener <IInputChannel>(receiveFromUri, new BindingParameterCollection()); listener.Open(); IInputChannel service = listener.AcceptChannel(TimeSpan.FromSeconds(10)); service.Open(); Message receivedMessage = service.Receive(TimeSpan.FromSeconds(10)); try { TObjectType receivedObject = receivedMessage.GetBody <TObjectType>(); Assert.True(receivedObject.Equals(objectToMatch), "Original and deserialized objects do not match"); AmqpProperties receivedProperties = (AmqpProperties)receivedMessage.Properties["AmqpProperties"]; PropertyInfo[] propInfo = typeof(AmqpProperties).GetProperties(); for (int i = 0; i < propInfo.Length; i++) { string propertyName = propInfo[i].Name; if (propertyName.Equals("RoutingKey", StringComparison.InvariantCultureIgnoreCase)) { Assert.AreEqual(RoutingKey, Convert.ToString(propInfo[i].GetValue(receivedProperties, null))); } else { Assert.AreEqual(Convert.ToString(propInfo[i].GetValue(expectedProperties, null)), Convert.ToString(propInfo[i].GetValue(receivedProperties, null))); } } } catch (NullReferenceException) { Assert.Fail("Message not received"); } catch (SerializationException) { Assert.Fail("Deserialized object not of correct type"); } finally { receivedMessage.Close(); service.Close(); listener.Close(); } }
public IDuplexChannel CreateChannel(EndpointAddress remoteAddress, Uri via, EndpointAddress localAddress, MessageFilter filter, int priority, bool usesUniqueHeader) { ChannelDemuxerFilter demuxFilter = new ChannelDemuxerFilter(new AndMessageFilter(new EndpointAddressMessageFilter(localAddress, true), filter), priority); IDuplexChannel newChannel = null; IOutputChannel innerOutputChannel = null; IChannelListener <IInputChannel> innerInputListener = null; IInputChannel innerInputChannel = null; try { innerOutputChannel = this.innerChannelFactory.CreateChannel(remoteAddress, via); innerInputListener = this.channelDemuxer.BuildChannelListener <IInputChannel>(demuxFilter); innerInputListener.Open(); innerInputChannel = innerInputListener.AcceptChannel(); newChannel = new ClientCompositeDuplexChannel(this, innerInputChannel, innerInputListener, localAddress, innerOutputChannel, usesUniqueHeader); } finally { if (newChannel == null) // need to cleanup { if (innerOutputChannel != null) { innerOutputChannel.Close(); } if (innerInputListener != null) { innerInputListener.Close(); } if (innerInputChannel != null) { innerInputChannel.Close(); } } } return(newChannel); }
private void sendButton_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; // Creating the Message TransmittedObject to = new TransmittedObject(); to.str = "Hello"; to.i = 5; XmlSerializerWrapper wrapper = new XmlSerializerWrapper(typeof(TransmittedObject)); Message m = Message.CreateMessage (MessageVersion.Default, "urn:test", to, wrapper); // Creating the Channel string channelName = "EMailHelloWorld"; string serverAddress = "*****@*****.**"; string clientAddress = "*****@*****.**"; WindowsMobileMailBinding binding = new WindowsMobileMailBinding(); BindingParameterCollection parameters = new BindingParameterCollection(); IChannelFactory <IOutputChannel> channelFactory = binding.BuildChannelFactory <IOutputChannel>(parameters); channelFactory.Open(); // Opening the Channel IOutputChannel outChannel = channelFactory.CreateChannel( new EndpointAddress(MailUriHelper.Create (channelName, serverAddress))); outChannel.Open(); // Sending the Message outChannel.Send(m); // Listening for the response IChannelListener <IInputChannel> listner = binding.BuildChannelListener <IInputChannel> (MailUriHelper.CreateUri(channelName, clientAddress), parameters); listner.Open(); IInputChannel inputChannel = listner.AcceptChannel(); inputChannel.Open(); Message reply = inputChannel.Receive(); // Deserializing and using the Message TransmittedObject to1 = reply.GetBody <TransmittedObject> (new XmlSerializerWrapper(typeof(TransmittedObject))); MessageBox.Show(to1.str + " " + to1.i.ToString()); // Cleaning up outChannel.Close(); channelFactory.Close(); listner.Close(); inputChannel.Close(); binding.Close(); Cursor.Current = Cursors.Default; }
public void Run() { IRawBodyUtility bodyUtil = new RawEncoderUtility(); IOutputChannel readyQueue = null; IOutputChannel doneQueue = null; UInt64 batchSize = (UInt64)opts.subTxSize; bool txPending = false; byte[] data = null; try { this.subscribeQueue = QueueChannelFactory.CreateReaderChannel(this.queue); readyQueue = QueueChannelFactory.CreateWriterChannel("", this.Fqn("sub_ready")); doneQueue = QueueChannelFactory.CreateWriterChannel("", this.Fqn("sub_done")); Message msg = bodyUtil.CreateMessage("ready"); readyQueue.Send(msg, TimeSpan.MaxValue); msg.Close(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Console.WriteLine("receiving {0}", this.msgCount); UInt64 expect = 0; if (batchSize > 0) { Transaction.Current = new CommittableTransaction(); } for (UInt64 i = 0; i < this.msgCount; i++) { msg = subscribeQueue.Receive(TimeSpan.MaxValue); data = bodyUtil.GetBytes(msg, data); msg.Close(); if (data.Length != this.msgSize) { throw new Exception("subscribe message size mismatch"); } UInt64 n = GetSequenceNumber(data); if (n != expect) { throw new Exception(String.Format("message sequence error. expected {0} got {1}", expect, n)); } expect = n + 1; if (batchSize > 0) { txPending = true; if (((i + 1) % batchSize) == 0) { ((CommittableTransaction)Transaction.Current).Commit(); txPending = false; Transaction.Current = new CommittableTransaction(); } } } if (txPending) { ((CommittableTransaction)Transaction.Current).Commit(); } Transaction.Current = null; stopwatch.Stop(); double mps = (msgCount / stopwatch.Elapsed.TotalSeconds); msg = bodyUtil.CreateMessage(String.Format("{0:0.##}", mps)); doneQueue.Send(msg, TimeSpan.MaxValue); msg.Close(); subscribeQueue.Close(); } finally { Close((IChannel)doneQueue); Close((IChannel)this.subscribeQueue); Close(readyQueue); } }