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());
}
}
}
}