SAP .NET 连接器有问题
我已经构建了一个连接到 SAP BAPI 过程以从 SAP 数据库中获取结果的 Web 应用程序(ASP.NET、C#)。
我已将它连接到 SAP BAPI 程序,它还获取 Web 应用程序的结果。
我的问题是,在第一次尝试期间,获取结果需要 25 到 30 秒,但从第二次尝试开始,结果会立即获取。
我不知道为什么第一次尝试获取结果需要这么长时间。
有人可以帮我吗?
SAP .NET 连接器有问题
我已经构建了一个连接到 SAP BAPI 过程以从 SAP 数据库中获取结果的 Web 应用程序(ASP.NET、C#)。
我已将它连接到 SAP BAPI 程序,它还获取 Web 应用程序的结果。
我的问题是,在第一次尝试期间,获取结果需要 25 到 30 秒,但从第二次尝试开始,结果会立即获取。
我不知道为什么第一次尝试获取结果需要这么长时间。
有人可以帮我吗?
这是常见的行为,实际上是由 SAP NCo 第一次检索 BAPI 的元数据引起的。
一旦它检索到元数据,它就会将其缓存以供后续调用,这应该很快。
我经常看到 BAPI_PO_CREATE1 的第一次调用时间约为 10 秒,随后的调用时间约为 1 秒。
我也看到了这种延迟,而且肯定是在我们使用连接器与 SAP 建立连接而不是与 SQL 建立连接的时候。
我推测这是因为在第一次尝试时连接器必须建立连接、验证并初始化它自己的连接池。
当然,这取决于您的 SAP 盒的负载情况以及它相对于您的 Web 服务器的位置,但我似乎没有找到任何完全解决它的方法。
您最好的做法是建立一次连接,然后尽可能多地重复使用它。
自从这个打开以来已经很长时间了,但它可以解决(如果你知道该怎么做,它甚至很容易)。
我们遇到了同样的问题,在建立连接之前延迟超过 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 答案也失败了。由于网关似乎缓存了负面命中,因此以下请求要快得多,但是一旦条目超时,您将再次遇到延迟。
所以:
或者(更糟糕的是,无论如何都应该设置反向查找区域)