cancel
Showing results for 
Search instead for 
Did you mean: 

SAP .NET NCo 3.x und bgRFC -> "Invalid TID"

former_member101664
Discoverer
0 Kudos

Hallo,

ich arbeite an einer Implementierung eines bgRFC Dienstes. Bisher gibt es kein Szenario in unserem Unternehmen dafür und alle Einstellungen wurde das erste mal vorgenommen / eingerichtet.

Der Code basiert größtenteils auf den Beispielen aus der Dokumentation und den SAP NCo 3.0 Demos. Bisherige Schritte:

1. Konfiguration bgRFC -> Supervisor Dest. pflegen (Typ L und Übertragungsprotokoll 'klassisch mit bgRFC')

2. Schedular: Destination angelegt und aktiviert

3. Demo-FuBa gebaut:

r_destination = cl_bgrfc_destination_outbound=>create( dest_name ).

r_unit = r_destination->create_qrfc_unit( ).

r_unit->add_queue_name_outbound( 'Z_EDV_DEMOS_1' ).

call function ... in background unit r_unit ...

4. RFC Server in .NET gebaut und in SM59 registiert (Typ T und 'klassisch mit bgRFC')

5. Im Monitor bgRFC Units steht auch in der Outbound Queue meine LUWs / Units in der entsprechenden Queue jedoch - je Coding auf dem C# RFC Server entweder mit dem Fehler:

A. TransactionIDHandler is not set on RfcServer NCO_SERVER

B. Invalid TID '%_I6o...'

Laut Dokumentation braucht man keinen TransactionIDHandler im bgRFC Server bzw. wenn ich einen aktiviere im Coding dann bekomme ich die Invalid TID Meldung.

Durch Debugging bin ich jetzt auf zwei Aspekte gestoßen an denen ich nicht weiterkomme:

Bei Fehler A. Wird im C# RFC Server die Funktion InvokeServerFunction gerufen und dem Parameter ServerFunctionInfo liegt der Typ 'ARFC_DEST_SHIP' bei. Dadurch wird im weiteren Verlauf eine Routine gewählt die Prüft ob ein TransactionIDHandler verfügbar ist - wenn nicht => Abbruch.

Bei Fehler B. Wird weiterhin der Typ 'ARFC_DEST_SHIP' übergeben und die Methode 'IsValidTID' prüft meine TID, dabei schlägt die Prüfung fehl, weil diese ungültige Zeichen beinhaltet wie % und Kleinbuchstaben.

Meine Vermutung wäre das SAP wohl durch einen Einstellungsfehler nicht den Typ 'BGRFC_DEST_SHIP' verwendet, sondern besagten 'ARFC_DEST_SHIP' und hierdurch die Standardfunktionen aus der sapnco-Library fehlschlägt. Oder ich bin auf dem Holzweg und habe einen anderen Fehler gemacht - über Hinweise und Ratschläge wäre ich echt dankbar!

Grüße

Accepted Solutions (0)

Answers (1)

Answers (1)

sebastian_hockmann2
Participant

Hallo Bernd.

bitte prüfe mal ob die Transaktion SRT_TOOLS vollständig ausgeführt hast.

Aus meiner Sicht kann auch bgRFC (wie auch tRFC/qRFC) durchaus mit Transaktion-ID arbeiten.

Laufen die SOAP Beispiele ?

Aktionen sollten in SRT_MONI auftauchen und die Transaktion SOAMANAGER sollte
geprüft werden.

Sebastian

former_member101664
Discoverer
0 Kudos

Vielen Dank für die Hinweise. Ich habe mit meinem Kollegen die Einstellungen geprüft und in den SRT_TOOLS (Prüfreports etc. sind nun alle grün) die Einstellungen nachgezogen.

Fazit ist leider negativ, der Fehler bleibt beständig.

Vielleicht als Ergänzung, in der SAP Doku im Bereich TRFC und QRTC steht u.a.:

After the COMMIT WORK, the SAP system makes several additional calls related to TRFC against our .NET component. The first call is CheckTID.

Dieser Call landet in der internen Funktion des SAP NCo InvokeServerFunction

private void InvokeServerFunction(RfcConnection conn, ServerFunctionInfo serverFuncInfo, RfcServerFunction functionImp) { ... }<br>

In der Signatur werden drei Parameter beschrieben, die Zweite "serverFuncInfo" hat die interne Eigenschaft Funktionsname mit dem Wert "ARFC_DEST_SHIP". Im weitern Ablauf der Funktion wird dadurch auf die falsche Methode geroutet:

static void ARfcDestShipImp(RfcServerContext ctx, IRfcFunction func)<br>

statt der eigentlich richtigen:

static void BGRfcDestShipImp(RfcServerContext ctx, IRfcFunction func)<br>

Soweit bisher unser Kenntnisstand und Analyse.

Grüße