private TransportMessage Receive(OracleAQQueue queue) { OracleAQMessage aqMessage = null; try { aqMessage = queue.Dequeue(this.dequeueOptions); } catch (OracleException ex) { if (ex.Number != OraCodes.TimeoutOrEndOfFetch) { throw; } } return(TransportMessageMapper.DeserializeFromXml(aqMessage)); }
/// <summary> /// Sends the given message to the address. /// </summary> /// <param name="message">Message to send.</param> /// <param name="address">Message destination address.</param> public void Send(TransportMessage message, Address address) { try { var queueConnectionString = this.DefaultConnectionString; if (ConnectionStringCollection.Keys.Contains(address.Queue)) { queueConnectionString = ConnectionStringCollection[address.Queue]; } using (OracleConnection conn = new OracleConnection(queueConnectionString)) { conn.Open(); using (OracleAQQueue queue = new OracleAQQueue(this.NamePolicy.GetQueueName(address), conn, OracleAQMessageType.Xml)) { queue.EnqueueOptions.Visibility = this.GetVisibilityMode(queueConnectionString); using (var stream = new MemoryStream()) { TransportMessageMapper.SerializeToXml(message, stream); OracleAQMessage aqMessage = new OracleAQMessage(Encoding.UTF8.GetString(stream.ToArray())); aqMessage.Correlation = message.CorrelationId; try { queue.Enqueue(aqMessage); } catch (OracleException ex) { if (ex.Number == OraCodes.QueueDoesNotExist) { throw new QueueNotFoundException { Queue = address }; } else { throw; } } } } } } catch (OracleException ex) { if (ex.Number == OraCodes.QueueDoesNotExist && address != null) { throw new QueueNotFoundException { Queue = address }; } else { OracleAQMessageSender.ThrowFailedToSendException(address, ex); } } catch (Exception ex) { OracleAQMessageSender.ThrowFailedToSendException(address, ex); } }