Я пытаюсь в первый раз удалить из очереди в моей производственной среде ODP.NET и C#.Очередь очереди Oracle AQ с ODP.NET
Я использовал официальный пример ODP.NET для разработки моего клиента, полученного из папки примеров установки.
Очередь - это тема Oracle AQ (многопользовательская), адресованная многими другими службами компании, написанными на J2EE.
Я написал классы отображения UDT, следуя рекомендациям по разработке ODP (http://docs.oracle.com/cd/E11882_01/win.112/e23174/featUDTs.htm#ODPNT0024).
Проблема заключается в следующем: мой клиент подключается к очереди, при этом он никогда не получает никакого сообщения (другие пользователи, подключенные к ним java-клиентами, получают их).
Вот мой код (без классов UDT, для держать короткий мой пост):
string constr = "user id=<USER_ID>;password=<PASSWORD>;data source=<DATASOURCE>";
OracleConnection conListen = new OracleConnection(constr);
OracleAQQueue queueListen = new OracleAQQueue("<TOPIC_QUEUE_ID>", conListen);
try
{
conListen.Open();
queueListen.MessageType = OracleAQMessageType.Udt;
queueListen.DequeueOptions.ConsumerName = "Test_Subscriber_ID";
queueListen.UdtTypeName = "SYS.AQ$_JMS_TEXT_MESSAGE";
queueListen.DequeueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
queueListen.DequeueOptions.Wait = 60;
OracleTransaction txn = conListen.BeginTransaction();
OracleAQMessage deqMsg = queueListen.Dequeue();
txn.Commit();
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message);
}
finally
{
queueListen.Dispose();
conListen.Close();
conListen.Dispose();
}
Еще одна деталь: после подключения в «all_queue_subscribers» вид не containt мой абонент «Test_Subscriber_ID».
Спасибо всем!
Посмотрите на эту статью и проверить исходный код, который предоставляется вместе с ним: Статья: http://www.oracle.com/technetwork/issue-archive/2009/ 09-nov/o69net-099734.html Код статьи: http://www.oracle.com/technetwork/issue-archive/2009/09-nov/o69odt-131369.zip Лучше, чем образцы, которые вы нашли. –
UDTs в ODP.NET сложны. Если вы собираетесь использовать их, вы должны начать с использования мастера генерации кода в составе инструментов разработчика Oracle для Visual Studio. https://apex.oracle.com/pls/apex/f?p=44785:24:1323236364075:::24:P24_CONTENT_ID,P24_PROD_SECTION_GRP_ID,P24_PREV_PAGE:10199,,24 –
Пожалуйста, проблема не в UDT, но факт что я никогда не получаю никакого сообщения из очереди. –