Teilen über


Empfangen eingehender tRFC-Aufrufe in SAP mithilfe des WCF-Dienstmodells

Sie können den Microsoft BizTalk-Adapter für mySAP Business Suite als Transaktions-RFC-Server (tRFC) verwenden, um eingehende tRFC-Aufrufe von SAP zu empfangen. Für eingehende tRFCs unterstützt der SAP-Adapter mehrere tRFCs in derselben SAP Logical Unit of Work (LUW).

Die Abschnitte in diesem Thema enthalten Informationen zur Verwendung des Adapters als tRFC-Server im WCF-Dienstmodell.

Weitere Informationen zur Verwendung des SAP-Adapters als tRFC-Server finden Sie in den folgenden Themen:

  • Eine Übersicht über die Unterstützung für tRFCs auf dem SAP-Adapter finden Sie unter Vorgänge für tRFCs in SAP. Sie sollten dieses Thema lesen, bevor Sie fortfahren.

  • Weitere Informationen zu den Nachrichtenschemas für tRFC-Servervorgänge finden Sie unter Vorgänge auf tRFCs in SAP.

Der WCF-Dienstvertrag für einen tRFC

Sie verwenden das Visual Studio-Plug-In Add Adapter Service Reference oder das ServiceModel Metadata Utility Tool (svcutil.exe), um einen WCF-Dienstvertrag für die tRFCs zu generieren, die Sie vom SAP-System erhalten möchten. Der für einen eingehenden tRFC generierte Vertrag ähnelt dem, der für einen eingehenden RFC generiert wird, außer dass:

  • tRFC-Vorgänge werden unter dem TRFC-Knoten angezeigt.

  • Der wcf-Dienstvertrag (Schnittstelle), der für eingehende tRFCs generiert wird, heißt "Trfc". Sie müssen diese Schnittstelle angeben, wenn Sie den Dienstendpunkt zum Diensthost hinzufügen. Dies ist auch die Schnittstelle, die Ihr WCF-Dienst implementieren muss.

    public interface Trfc {  
    
        // CODEGEN: Generating message contract since the wrapper namespace (http://Microsoft.LobServices.Sap/2007/03/Trfc/) of message Z_RFC_MKD_ADDRequest does not match the default value (http://Microsoft.LobServices.Sap/2007/03/)  
        [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.LobServices.Sap/2007/03/Trfc/Z_RFC_MKD_ADD", ReplyAction="http://Microsoft.LobServices.Sap/2007/03/Trfc/Z_RFC_MKD_ADD/response")]  
        Z_RFC_MKD_ADDResponse Z_RFC_MKD_ADD(Z_RFC_MKD_ADDRequest request);  
    }  
    
  • Der Anforderungsnachrichtenvertrag für TRFC-Vorgänge verfügt über einen GUID-Parameter. Dies ist die GUID, die der SAP TID für den tRFC zugeordnet ist. Bei tRFC-Servervorgängen verwaltet der Adapter alle Aufrufe zum Commit, Rollback und Bestätigen der TID durch das SAP-System, sodass es keinen Grund gibt, diese GUID explizit zu verwenden. Sie können sie jedoch verwenden, um die SAP TID aus dem SAP-Adapter abzurufen, indem Sie SapAdapterUtilities.ConvertGuidToTid aufrufen. Dies kann hilfreich sein, um Probleme mit dem SAP-System zu beheben.

    [System.Diagnostics.DebuggerStepThroughAttribute()]  
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]  
    [System.ServiceModel.MessageContractAttribute(WrapperName="Z_RFC_MKD_ADD", WrapperNamespace="http://Microsoft.LobServices.Sap/2007/03/Trfc/", IsWrapped=true)]  
    public partial class Z_RFC_MKD_ADDRequest {  
    
        ...  
    
        public Z_RFC_MKD_ADDRequest(string DEST, System.Nullable<int> X, System.Nullable<int> Y, System.Guid TransactionalRfcOperationIdentifier) {  
            this.DEST = DEST;  
            this.X = X;  
            this.Y = Y;  
            this.TransactionalRfcOperationIdentifier = TransactionalRfcOperationIdentifier;  
        }  
    }  
    
    

Gewusst wie aktivieren, dass der Adapter als tRFC-Server fungiert?

Damit der Adapter als tRFC-Server fungiert, müssen Sie die Bindungseigenschaft TidDatabaseConnectionString auf den Verbindungszeichenfolge für die TID-Datenbank festlegen. Dies sollten Sie tun, bevor Sie den Diensthost öffnen. Dies ist die Datenbank, in der der Adapter die SAP-Transaktions-ID (TID) für jeden tRFC speichert. Weitere Informationen zu dieser Bindungseigenschaft finden Sie unter Informationen zu Den Bindungseigenschaften des BizTalk-Adapters für mySAP Business Suite.

Gewusst wie Eintrag in die Transaktion für eingehende tRFCs?

Eine SAP Logical Unit of Work (LUW) kann mehrere tRFCs enthalten. Im SAP-System wird eine LUW durch eine eindeutige Transaktions-ID (TID) identifiziert. Der Adapter erstellt eine commitfähige Transaktion für jede der TIDs, die das SAP-System verwendet, wenn tRFC-Aufrufe auf dem Adapter aufgerufen werden. Wenn das SAP-System einen tRFC auf dem Adapter aufruft; Der Adapter fließt die transaktion, die der SAP TID zugeordnet ist, an Ihren Dienst. Sie können auf diese Transaktion als Ambient-Transaktion innerhalb Ihrer Vorgangsmethode zugreifen. Durch die Registrierung in dieser Umgebungstransaktion können die im Vorgang ausgeführten Aktionen an der SAP LUW teilnehmen.

Um sich in der Ambient-Transaktion in einer Vorgangsmethode eintragen zu lassen, müssen Sie:

  1. Kommentieren Sie die Operationsmethode mit der TransactionScopeRequired-Eigenschaft des OperationBehavior-Attributs . Dadurch wird WCF mitgeteilt, dass Sie innerhalb des Vorgangs auf die Ambient-Transaktion zugreifen möchten.

  2. Erstellen Sie einen Transaktionsbereich, indem Sie entweder die Vorgangsmethode mit der TransactionAutoComplete-Eigenschaft des OperationBehavior-Attributs kommentieren oder explizit ein TransactionScope innerhalb der Operationsmethode verwenden.

    Das folgende Beispiel zeigt einen Dienst, der zwei Vorgänge implementiert. Beide Vorgangsmethoden werden mit der TransactionScopeRequired-Eigenschaft versehen, um auf die Ambient-Transaktion zuzugreifen.

  • Z_TRFC_EXAMPLE1 wird mithilfe eines TransactionScope-Objekts explizit in die Transaktion eintragen.

  • Z_TRFC_EXAMPLE2 wird mit der TransactionAutoComplete-Eigenschaft kommentiert, um sich in der Transaktion eintragen zu lassen.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false)]  
class Z_Example_ServiceContractClass : Trfc  
{  
  
    // This operation method explicitly creates a TransactionScope to enlist in the ambient transaction  
    // You must explictly call ts.Complete to complete the transaction before you return from the operation  
    // Otherwise the transaction is aborted.  
    // You can throw an exception or return without calling ts.complete to abort the transacation  
    [OperationBehavior(TransactionScopeRequired = true)]  
    public Z_TRFC_EXAMPLE1Response Z_TRFC_EXAMPLE1(Z_TRFC_EXAMPLE1Request request)  
    {  
        using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))  
        {  
            // Process tRFC  
  
            ...  
  
            Z_TRFC_EXAMPLE1Response response = new Z_TRFC_EXAMPLE1Response();  
            response.TransactionalRfcOperationIdentifier = request.TransactionalRfcOperationIdentifier;  
            return response;  
            //since there is no ts.Complete(), this is equivalent to a rollback.  
        }  
    }  
  
    // This operation method sets the TransactionAutoComplete property of the OperationBehavior attribute  
    // to enlist in the transaction. There is no need to explictly create a TransactionScope in the code.  
    // If the method returns with no unhandled exceptions, the transaction completes; otherwise it aborts  
    // You can throw an exception to abort the transaction.  
    [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]  
    public Z_TRFC_EXAMPLE2Response Z_TRFC_EXAMPLE2(Z_TRFC_EXAMPLE2Request request)  
    {  
        // Process tRFC  
  
        ...  
  
        Z_TRFC_EXAMPLE2Response response = new Z_TRFC_EXAMPLE2Response();  
        response.TransactionalRfcOperationIdentifier = request.TransactionalRfcOperationIdentifier;  
        return response;  
        //if there is no unhandled exception, the transaction completes when the operation returns.  
    }  
}  

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells