c # dequeue AQ и как вернуть сообщение об ошибке в Oracle AQ - PullRequest
0 голосов
/ 13 мая 2019

У меня есть консольное приложение c #, которое получает данные и отправляет их в другую программу для дальнейшей обработки. В C # я снимаю AQ с оракула и получаю данные отлично. Но я хотел бы отправить ответное сообщение в Oracle, чтобы сказать, прошла ли «отправка».

// Udt works fine
public class XALOUTPUT_T : IOracleCustomType, INullable {...}

public static void listen(OracleConnection conListen)
{
// Create queue
OracleAQQueue queueListen = new OracleAQQueue("XALOUTPUT_Q", conListen);

try
{
queueListen.Listen(null);
queueListen.MessageType = OracleAQMessageType.Udt;
queueListen.UdtTypeName = "XALOUTPUT_T";

OracleTransaction txn = conListen.BeginTransaction();
queueListen.DequeueOptions.Visibility = OracleAQVisibilityMode.OnCommit;
queueListen.DequeueOptions.Wait = 5;

OracleAQMessage deqMsg = queueListen.Dequeue();
XALOUTPUT_T result = (XALOUTPUT_T)deqMsg.Payload;
txn.Commit();

Task<WebResponse> task = SendData( result.TEKST.Value, 
result.BESKEDTYPE, result.EMAIL, result.FILNAVN);

}
finally
{              
queueListen.Dispose();
listen(conListen);
}
}

static async Task<WebResponse> SendDataToLasernet(string tekst, string beskedtype, string email, string filnavn)
{
    var request = System.Net.WebRequest.Create(" xxx");
    string xyz = "<xml><tekst>" + tekst + "</tekst><jobinfo><MailTo>" + email + "</MailTo><FileName>" + filnavn + "</FileName></jobinfo></xml>";
    Console.WriteLine(xyz);
    var data = Encoding.ASCII.GetBytes(xyz);
    request.Method = "POST";
    request.ContentType = "application/xml";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
    stream.Write(data, 0, data.Length);
    }
    return await request.GetResponseAsync();
}

Я хотел бы вернуть task.exception (если оно есть) в Oracle AQ. И вставьте его в AdvancedQueue_QT

У вас есть идеи, как вернуть что-то в AQ?

...