C# 使用SNC/SSO的SAP GUI脚本

C# 使用SNC/SSO的SAP GUI脚本,c#,sap,C#,Sap,我正在尝试使用SNC连接和用户名和密码(非自动)使用SAP GUI脚本登录SAP。 在我的连接列表中,有一个自动登录设置为true的目标服务器。 我知道可以再次添加相同的服务器,并将“自动登录”设置为false并选择它,但客户端不希望在列表中添加其他位置。 通常(没有SNC)我只使用 CSapROTWrapper sapROTWrapper = new CSapROTWrapper(); var SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");

我正在尝试使用SNC连接和用户名和密码(非自动)使用SAP GUI脚本登录SAP。 在我的连接列表中,有一个自动登录设置为true的目标服务器。 我知道可以再次添加相同的服务器,并将“自动登录”设置为false并选择它,但客户端不希望在列表中添加其他位置。 通常(没有SNC)我只使用

CSapROTWrapper sapROTWrapper = new CSapROTWrapper();
var SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
var engine = SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null);
var GuiApp = (GuiApplication)engine;
var connection = GuiApp.OpenConnection("My server name", true, true);
然后我可以输入用户名和密码。 但是,使用SNC和autologon,我已经使用SNC中的凭据登录(我希望使用不同的凭据,而不使用SNC)。 我试着用

var connection = GuiApp.OpenConnectionByConnectionString("my.server.address", true, true);
但它失败了,因为它没有使用SNC连接(这是必需的)。我尝试用java客户端的方式构建连接字符串,我在Internet上找到了:

/H/ip.add.res.s/S/3200&sncon=true&sncname=properName&sncqop=4
但每次未使用信息建立连接时:

无法实例化“Sapgui组件”

我浏览了多个SAP文档,但没有找到有关传递SNC参数的信息


最后一个问题是:有没有一种方法可以使用带有SNC的代码连接到SAP GUI,而不使用自动登录?

这个问题比我预期的更容易解决。我想我花了太多时间,没有选择最简单的选项。 使用连接字符串是正确的,但我找不到我的连接字符串。 要找到它,我只需要使用正确的设置启动SAP,并读取连接字符串,如下所示:

var sapROTWrapper = new CSapROTWrapper();
var sapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
var engine = sapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, sapGuilRot, null);
var guiApp = (GuiApplication)engine;
var existingConnection = (GuiConnection)guiApp.Connections.ElementAt(0);
var properConnectionString = existingConnection.ConnectionString;
然后我所需要做的就是保存这个连接字符串并重新登录以使用它

var sapROTWrapper = new CSapROTWrapper();
var sapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
var engine = sapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, sapGuilRot, null);
var guiApp = (GuiApplication)engine;
var connectionString = "connection string read from previous run";
var connection = guiApp.OpenConnectionByConnectionString(connectionString, true, true);

现在我可以在不使用SSO的情况下将SAP与SNC一起使用。

应用程序将自动使用存储在用户临时文件夹中的cookie。要使用不同的帐户登录,需要使用不同的cookie。“应用程序”是指SAP Gui还是SNC?没有SNC,我可以轻松使用任何帐户登录,只有SNC会导致问题。SAP正在使用cookies。使用诸如wireshark或fiddler之类的嗅探器,比较SAP和SNC中的http头。