Weil ich das für einen SAP Call mit DirectAccess (ja, der SAP .NET Connector verhält sich anders als das was in SAP GUI/NWBC eingebaut ist in diesem Umfeld) die Verbindung nachprogrammiert habe und vielleicht jemand das auch brauchen könnte – im Projekt ist nur SAPNCO.DLL und SAPNCO_UTILS.DLL von SAP zu referenzieren.

Dreist von codeproject geklaut und angepasst (SNC)/vereinfacht – außerdem kann man hier den Text kopieren und hat nicht nur Screenshots 😀

using System;
using SAP.Middleware.Connector;

namespace SAPPing
{
   public class SAPDestinationConfig:IDestinationConfiguration
   {
      public bool ChangeEventsSupported()
      {
         return false;
      }

      public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;

      public RfcConfigParameters GetParameters(string destinationName)
      {
         RfcConfigParameters par=new RfcConfigParameters();
         par.Add(RfcConfigParameters.Name, "ABC");
         // Direktverbindung (AppServerHost) oder via MessageServer (=LoadBalanced)
         par.Add(RfcConfigParameters.AppServerHost, "abcsaphost.mydomain.com");
         //par.Add(RfcConfigParameters.MessageServerHost, "abcsaphost.mydomain.com");
         //par.Add(RfcConfigParameters.MessageServerService, "1234");  // port vonLandscape XML
         par.Add(RfcConfigParameters.SystemNumber, "11");
         par.Add(RfcConfigParameters.SystemID, "ABC");
         par.Add(RfcConfigParameters.Client, "999");   // "Mandant"
         par.Add(RfcConfigParameters.Language, "DE");
         par.Add(RfcConfigParameters.PoolSize, "10");
         par.Add(RfcConfigParameters.SncPartnerName, "p:CN=whatever/abc@mydomain.com");   // von Landscape XML
         par.Add(RfcConfigParameters.SncMyName, "...Rechtsklick in SecureLogin und 'Copy SNC name to clipboard' - auch irgendwas mit 'p:CN=user@mydomain.com' bei Kerberos");
         par.Add(RfcConfigParameters.SncMode, "1");    // SNC benutzen
         par.Add(RfcConfigParameters.SncQOP, "9");     // "beste" SNC Methode automatisch wählen
         par.Add(RfcConfigParameters.Trace, "4");      // volles Tracing

         return par;
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         RfcTrace.TraceDirectory = @"C:\TEMP\SAP";
         RfcTrace.DefaultTraceLevel = (uint)RfcTracing.Level4;
         GeneralConfiguration.CPICTraceLevel = 3;

         IDestinationConfiguration config = new SAPDestinationConfig();
         config.GetParameters("ABC");
         if (RfcDestinationManager.TryGetDestination("ABC") == null)
         {
            RfcDestinationManager.RegisterDestinationConfiguration(config);
         }

         try
         {
            RfcDestination dest = RfcDestinationManager.GetDestination("ABC");
            dest.Ping();
            Console.WriteLine($"SAP ping OK, connected to {dest.SystemAttributes.PartnerHost} running {dest.SystemAttributes.PartnerRelease}");
         }
         catch (Exception oExc)
         {
            Console.WriteLine(oExc.ToString());
         }
      }
   }
}