You might consider to act as a RFC Server in NCO 3.0 and handle either 'IDOC_INBOUND_IN_QUEUE' and/or 'IDOC_INBOUND_ASYNCHRONOUS'.
[RfcServerFunction(Name = "IDOC_INBOUND_IN_QUEUE")]
public static void IDOC_INBOUND_IN_QUEUE(RfcServerContext serverContext, IRfcFunction rfcFunction)
{
//Create table to handle control records
IRfcTable irtControl = rfcFunction.GetTable("IDOC_CONTROL_REC_40");
//Create table to handle data records
IRfcTable irtData = rfcFunction.GetTable("IDOC_DATA_QUEUE");
//Process tables
//
//Confirm receipt of IDoc
//BAPI call back to SAP to confirm if needed
}
This site may be of value http://www.dataxstream.com/