SAP nco多重连接(到不同的主机)

时间:2018-05-28 11:42:42

标签: c# sharepoint sap

对于单个端口中的每个站点,需要连接到不同的服务器主机。 虽然第一次连接没有问题。但是当尝试注册(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;
        }

1 个答案:

答案 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对象来定义。目的地标识可以打开连接的后端。