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

时间:2011-09-15 08:46:32

标签: c# asp.net sap-connector

我遇到了SAP .NET Connector

的问题

我构建了一个Web应用程序(ASP.NET,C#),它连接到SAP BAPI过程以从SAP数据库中获取结果。

我已将其连接到SAP BAPI程序,它还会获取Web应用程序的结果。

我的问题是,在第一次尝试期间,获取结果需要25到30秒,但从第二次尝试开始,结果将立即获取。

我不确切知道为什么第一次尝试取得结果需要这么长时间。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

我也看到了这种延迟,这肯定是我们使用连接器建立与SAP的连接,而不是与SQL有关。

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

当然,这取决于您的SAP盒子的加载方式以及它相对于您的Web服务器的位置,但似乎没有任何方法可以完全解决这个问题。

您最好的做法是进行一次连接,然后尽可能多地重复使用。

答案 1 :(得分:0)

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

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

我经常看到BAPI_PO_CREATE1的第一次通话时间约为10秒,后续通话时间约为1秒。

答案 2 :(得分:0)

这是一个很长时间以来,但它可以解决(如果您知道该怎么做,甚至很容易)。

我们遇到了同样的问题,直到建立连接之前,延迟超过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添加私有区域以成功进行反向查找),这样网关就不必运行在暂停。

或(更糟糕的是,无论如何应该设置反向查找区域)

  1. 遵循sap注释1055602,以通过rdisp / reverse_name_lookup参数永久禁用反向查找。