对于单个端口中的每个站点,需要连接到不同的服务器主机。 虽然第一次连接没有问题。但是当尝试注册(RegisterDestinationConfiguration)与另一个连接池名称抛出异常时,目标配置已经为ConnectionPoolName1初始化,因此无法注册ConnectionPoolName2。
function(){
if (SAPDestination == null)
{
SAPDestination = SAPConnection(ApplicationSite);
RfcSessionManager.BeginContext(SAPDestination);
}
rfcTravelfunc = SAPDestination.Repository.CreateFunction("FunctionName");
}
private RfcDestination SAPConnection(SPSite ApplicationSite)
{
RfcDestination SAPConnect = null;
try
{
DestinationConfig objConfig = new DestinationConfig();
SAPConnect = objConfig.TryGetDestination(ConnectionPoolName); //If connection doesnt exist with this connection pool name returns null
if (SAPConnect == null)
{
DestinationConfig configObj = new DestinationConfig();
DestinationConfig.ApplicationSite = ApplicationSite;
RfcDestinationManager.RegisterDestinationConfiguration(configObj); //Throws exception when trying to register for new connection pool name
SAPConnect = RfcDestinationManager.GetDestination(ConnectionPoolName);
}
}
catch (Exception ex)
{
}
return SAPConnect;
}
答案 0 :(得分:0)
RfcDestinationManager.RegisterDestinationConfiguration()
是全局静态方法。您只能注册一次。应该在静态上下文(如静态类构造函数)中设置它,或者您可以使用RfcDestinationManager.IsDestinationConfigurationRegistered()
检查是否已注册。抛出该异常是为了防止错误使用。
注册对象需要实现SAP.Middleware.Connector.IDestinationConfiguration
。
它具有方法RfcConfigParameters GetParameters(string destinationName);
,该方法应返回所请求目标的连接参数。
仅当需要从外部存储中查找连接参数时,才应使用这种方式。比较简单的方法是将连接参数存储在app.config / web.config中(可以存储多个参数),而不使用RfcDestinationManager.RegisterDestinationConfiguration()
。
来自SAP NCo教程代码StepByStepClient.cs
.Net连接器3.0引入了新的面向目标的概念。应用程序使用目标实例,这些目标实例是默认情况下在应用程序配置文件(app.config)中配置的,也可以通过显式注册IDestinationConfiguration对象来定义。目的地标识可以打开连接的后端。