【问题标题】:SAP JCo - Server started on front-end workstationSAP JCo - 服务器在前端工作站上启动
【发布时间】:2017-12-06 20:40:38
【问题描述】:

我需要创建一个程序,它驻留在客户端 PC 上,从 SAP LOGON 执行,接收一些 RFC 请求,返回数据并终止。

我一直在关注如何实现 JCo 服务器的本教程:

https://blogs.sap.com/2017/08/25/sap-jco-server-example/

我根据教程配置了 jco 连接属性。我的程序已执行,但 SAP 未能向其发送任何 RFC 请求并以超时结束。

我注意到我的程序使用以下参数执行:

/H/gd9.company.com, sapgw02, 87945336, IDX=4

我猜这是 SAP 告诉我 RFC 连接的配置值。我的意思是,我不应该让它们成为静态的(就像在教程中的配置文件中一样),而是使用参数中的值。

第一个应该是主机 (jco.server.gwhost),虽然我不明白为什么它的前缀是 /H/。她第二个可能是jco.server.gwserv

但是其他两个参数是什么?我应该使用它们以某种方式配置 RFC 连接吗?

【问题讨论】:

    标签: java sap jco


    【解决方案1】:

    在 SM59 中,您可以通过几种不同的方式设置“T”类型的目的地:

    • 注册服务器(带有程序 ID)
    • 已启动的服务器(使用要启动的可执行文件的名称)。这有几种不同的风格:如果我没记错的话,在应用服务器主机上启动、在网关上启动、在前端 PC 上启动等等。

    在第一种情况下(“注册的服务器”),连接已经存在(它是由服务器程序创建的,在给定的程序 ID 下注册时),SAP 系统只是通过这个发送任何 RFC 请求到这个目的地打开连接。

    在第二种情况下(启动服务器),机制完全不同。 SAP 系统首先生成一个唯一 ID(CPIC 对话 ID),告诉网关开始侦听具有该 ID 的传入连接,然后启动给定的可执行文件并告诉它打开具有该 ID 的连接。当网关报告具有该 ID 的人确实打开了连接时,SAP 系统最终通过它发送 RFC 请求。可执行文件以几种不同的方式启动,具体取决于目标的“风格”:通过 fork(“在网关上启动”)、通过远程 shell(“在给定的应用服务器主机上启动”)或通过发送可执行文件和启动参数通过当前打开的 DIAG 连接将 SAPGui 与当前 ABAP 端用户会话连接回 SAPGui。然后 SAPGui 使用给定的参数启动可执行文件(“在前端 PC 上启动”)。

    正如 Trixx 已经说过的:JCo3 只支持注册服务器,不支持启动服务器。如果您需要该类型的 RFC 服务器(例如,因为您希望通过 SAPGui 在前端 PC 上启动它),您将需要使用 NetWeaver RFC 库编写 C/C++ 程序或使用 NCo3 编写 .NET 程序。 NCo3 和 NW RFC Library 都为启动的服务器提供了必要的功能。 (请参阅他们的文档。)

    【讨论】:

      【解决方案2】:

      JCo 3.0 不支持已启动的 RFC 服务器程序,仅支持已注册的程序,其中启动主动权来自 Java 端。

      您不会让这个启动 RFC 服务器方案与 JCo 一起使用。

      只有启动一些非 Java 程序(如命令 shell 脚本)的解决方法是可以想象的,其目的只是启动 JCo 服务器程序,然后在网关上使用一些预定义的程序 ID 注册自己。之后,您可以使用 ABAP 端的第二个目标,该目标随后被配置为使用此注册的 RFC 程序 ID。 不太好,但目前是您需要坚持使用 Java 的唯一方法。

      编辑(2018 年 1 月 10 日):
      我认为你得到的四个参数是:

      1. GWHOST(SAP 网关主机以 SAProuter 字符串为前缀)
      2. GWSERV(SAP 网关服务作为符号服务名)
      3. CONVID (正在使用 CPIC 对话 ID)
      4. IDX        (CPIC 连接索引指定正在使用的某些 SAP 内部数据结构)

      在 JCo 3.0 中没有 API 可以传递这些值,即特别是参数 no。 3 和 4。但这是启动 RFC 服务器程序方案工作所必需的。与已注册的 RFC 服务器程序方案相比,不同之处在于,对于已启动的 RFC 服务器程序,网关已经打开了 CPIC 连接,并且需要使用这个现有的 CPIC 连接,即 RFC 服务器必须将自己附加到这个现有的连接。

      【讨论】:

      • 如果java程序做同样的事情(在某处注册),直接启动java程序或通过shell脚本启动java程序有什么区别?
      • @Jardo:反问:您在 SM59 目标中输入哪个可执行名称作为要启动的程序?
      • 。 hcterm5rfc.exe
      • @Jardo:hcterm5rfc.exe 是使用 JCo 3.0 的 Java 程序吗?我很困惑。
      • 是的,它是一个打包为 exe 的 java 程序。你要去哪里?
      【解决方案3】:
      【解决方案4】:

      我不知道IDX=4 是什么意思,但前三个参数看起来像是设置JCOServer 所需的值(主机、端口、程序ID)。我从来没有设置过 TCP 目的地以外的东西,所以我可能对此有误,但您可以尝试使用这三个参数设置 JCOServer,然后看看接下来会发生什么。我想 SAP 会创建一个动态 TCP 目标并等待您以这种方式连接。之后调用 RFC。

      RFC 调用的问题是,您需要为 RFC 服务器设置适合该特定 RFC 的存储库元数据,因此很可能在设置服务器后,SAP 系统仍然无法发送数据。 SAP 端的错误消息应该告诉您尝试了什么 RFC 调用,或者使用跟踪消息(您可以设置的另一个属性)设置您的 JCOServer 以找出“在线”发生的事情并从那里继续,即创建元数据,在连接之前将其添加到服务器的存储库等。

      顺便说一句:您可能需要使用数字端口值而不是别名(此处为 sapgw02),因为与 JCo 2 不同的是,映射并不总是适用于 JCo 3(它不适用于外来值与 JCo 2 中的任何一个)

      【讨论】:

      • JCo RFC 服务器程序无法从 ABAP 端启动。时期。 JCo 3.0 不支持此功能。仅支持注册的 RFC 服务器程序。程序 ID 特定于已注册的 RFC 服务器程序。
      • @Trixx 我没有说过类似的话,只是试图理解传递给 SAP 调用的程序的参数。如果你能解释这四个参数的含义,我很高兴今天能学到一些新东西。
      • 我在回答中添加了一些信息。请在那里查看我认为这些参数的用途。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多