SAP . net连接器在第一次尝试时需要很长时间才能获取结果

本文关键字:长时间 结果 获取 连接器 net 第一次 SAP | 更新日期: 2023-09-27 18:08:53

我有一个关于SAP .NET连接器的问题

我已经建立了一个web应用程序(ASP。. NET, c#)连接SAP BAPI过程,从SAP数据库获取结果。

我已经连接到SAP BAPI过程,它也为web应用程序获取结果。

我的问题是,在第一次尝试期间,它需要25到30秒来获取结果,但从第二次尝试开始,结果被获取没有时间。

我不知道为什么第一次读取结果要花这么长时间。

有人能帮我一下吗?

SAP . net连接器在第一次尝试时需要很长时间才能获取结果

自从这个问题被打开已经有很长时间了,但它是可以解决的(如果你知道该怎么做,它甚至很容易)。

我们遇到了同样的问题,在建立连接之前延迟超过10秒。在目标服务器的SM21事务中,在客户端得到应答之前连接是不可见的。

我已经捕获了一个网络跟踪,看到它确实是网关在请求和响应之间占用时间。在服务器的dev_rd日志文件(网关调试日志)中出现了(在初始延迟之后)一个非常明显的条目:

Fri Aug  3 07:55:20:963 2018
NiHLGetHostName: to get [private-ip] failed in 12004ms (tl=2000ms; MT; UC)
*** ERROR => NiHLGetHostName: NiPGetHostByAddr failed (rc=-1) [nixxhl.cpp   514]

试图通过nslookup工具获得该IP的DNS答案也失败了。下面的请求要快得多,因为网关似乎缓存了负命中,但是一旦入口超时,您将再次遇到延迟。

因此:

  1. 配置DNS服务器(添加带有in-addr的私有区域)。arpa(反向查找成功),这样网关就不必遇到超时。

或者

(更糟的是,无论如何都应该设置反向查找区域)
  • 遵循sap注释1055602,通过rdisp/reverse_name_lookup参数永久停用反向查找。
  • 我也看到了这个延迟,它肯定是在我们使用连接器与SAP建立连接而不是与SQL有关的时候。

    我推测这是因为在第一次尝试时连接器必须建立连接,验证并初始化自己的连接池。

    这将取决于你的SAP盒子是如何加载的,当然,它相对于你的web服务器位于哪里,但似乎没有任何方法可以完全绕过它,我发现

    你最好的做法是只建立一次连接,然后尽可能地重用它。

    这是常见的行为,实际上是由SAP NCo第一次为BAPI检索元数据引起的。

    一旦检索到元数据,它将缓存它以供后续调用,这应该很快。

    我经常看到对BAPI_PO_CREATE1的第一次调用时间为~10秒,后续调用时间为~1秒。

    我观察到类似的行为,这意味着在使用SAP Cloud Appliance Library使用公共IP地址部署的SAP S/4HANA 2022系统时存在性能问题。在我们的例子中,使用基于Eclipse的ABAP开发工具(ADT)的初始登录非常慢,而随后的请求运行得很快。原来框架试图解析客户端的内部ip地址,但第一次调用失败。后续调用速度很快,因为缓存了ip地址(在本例中是指失败的ip地址)。因此,在随后的调用中,框架不会尝试第二次解析这些ip地址。在比上面提到的版本更新的版本中,可以设置第二个特定于SAP Gateway服务的参数(不要与SAP Gateway混淆)。rdisp/reverse_name_lookup千瓦/resolve_phys_addr两者都可以设置为0。只要应用程序服务器没有重新启动,使用事务RZ11也可以临时工作。我将两个参数都设置为0