0

我有一个 .Net 应用程序,用于通过它创建 SAP 销售订单。当我使用(通用)单个 SAP 用户帐户创建rfcDestination时,它可以与多个用户完美配合。但是当我使用登录用户的用户帐户时,它会出现以下异常。

RfcInvalidStateException:Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapException: destination MAQ is invalid ---> SAP.Middleware.Connector.RfcInvalidStateException: destination MAQ is invalid
   at SAP.Middleware.Connector.RfcFunction.Invoke(RfcDestination destination)
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapConectionProvider.Invoke[T](IDataRequet request, String username, String password, IRfcFunction& rfcFunction)
   --- End of inner exception stack trace ---
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapConectionProvider.Invoke[T](IDataRequet request, String username, String password, IRfcFunction& rfcFunction)
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.SapDataRepository2.Invoke[T](IDataRequet request, String user, String password)
08:20:52.016 [23] ERROR General - ATP Check Exception:Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapException: destination MAQ is invalid ---> SAP.Middleware.Connector.RfcInvalidStateException: destination MAQ is invalid
   at SAP.Middleware.Connector.RfcFunction.Invoke(RfcDestination destination)
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapConectionProvider.Invoke[T](IDataRequet request, String username, String password, IRfcFunction& rfcFunction)
   --- End of inner exception stack trace ---
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.Provider.SapConectionProvider.Invoke[T](IDataRequet request, String username, String password, IRfcFunction& rfcFunction)
   at Portal.Infrastructure.Data.BoundedContext.ScreenPop.SAP.SapDataRepository2.Invoke[T](IDataRequet request, String user, String password)

这只发生在多个用户同时调用 rfc 时。

SAP .Net 连接器是否支持多个 SAP 用户帐户?

4

1 回答 1

2

您需要使用 RfcCustomDestination 进行多次登录:

网络配置

  <configSections>
    <sectionGroup name="SAP.Middleware.Connector">
      <sectionGroup name="ClientSettings">
        <section name="DestinationConfiguration" type="SAP.Middleware.Connector.RfcDestinationConfiguration, sapnco"/>
      </sectionGroup>
    </sectionGroup>
  </configSections>


  <SAP.Middleware.Connector>
    <ClientSettings>
      <DestinationConfiguration>
        <destinations>
          <!-- multiple ways to do this ... -->
          <add NAME="DEV" SYSID="DEV" ASHOST="mysapashost.com" SYSNR="00" CLIENT="0000" LANG="EN" MAX_POOL_SIZE="5" IDLE_TIMEOUT="10" USER="anything it is not used" PASSWD="anything it is not used"/>

        </destinations>
      </DestinationConfiguration>
    </ClientSettings>
  </SAP.Middleware.Connector>


</configuration>

应用代码:

private static RfcCustomDestination mydestination()
{
    //"DEV" is the name of the destination in the web.config
    RfcDestination rfcDest = RfcDestinationManager.GetDestination("DEV");

    RfcCustomDestination _customDestination = rfcDest.CreateCustomDestination();
    _customDestination.User = "LoggedOnSAPUserid";
    _customDestination.Password = "LoggedOnSAPPassword";

    return _customDestination;
}

public string runMyRFC(string myInput)
{
    RfcCustomDestination _customDestination = mydestination();
    IRfcFunction Results = _customDestination.Repository.CreateFunction("Z_SOME_RFC");

    Results.SetValue("RFCInput", myInput);

    Results.Invoke(_customDestination);

    string threResult;

    //. . .

    return theResult;

}
于 2014-10-25T19:51:35.023 回答