0

我选择 PyRFC 库来完成从 Python 连接到 SAP 的任务。一切正常,除了连接。代码在连接到 SAP 时停止并显示错误消息。

import pyrfc
def get_connection(connmeta):
print('Connecting ...', connmeta['ashost'])
return Connection(**connmeta)

TEST = { 'user' : 'XX',
'passwd' : 'XX',
'ashost' : 'XXX.XXX.XXX.XXX',
'sysnr' : '00',
'client' : '400',
'lang' : 'EN' }

conn = get_connection(TEST)

它抛出:

错误信息

pyrfc._exception.CommunicationError: RFC_COMMUNICATION_FAILURE (rc=1): key=RFC_COMMUNICATION_FAILURE, message=

本地主机 XXX-XXXXXXX 上的 LOCATION CPIC (TCP/IP),带有 Unicode

错误伙伴 'XXX.XXX.XXX.XXX:3300' 未到达

时间 2018 年 11 月 13 日星期二 16:33:59

发布 721

组件 NI(网络接口)

版本 40

遥控-10

模块 nixxi.cpp

线 3283

细节 NiPConnect2: XXX.XXX.XXX.XXX:3300

系统调用连接

错误号 10061

ERRNO TEXT WSAECONNREFUSED:连接被拒绝

计数器 2

[味精:class=, type=, number=, v1-4:=;;;]

似乎问题在于服务器的防火墙。我在互联网上搜索了大多数这样的答案,包括 SAP 的社区。

然后我远程登录 SAP 的 IP 端口并超时。似乎关闭的端口会导致连接失败。

但在使用 Python 之前,我使用 VBA 从 SAP 获取数据。VBA 中的配置与 Python 中的配置几乎相同

Set R3 = CreateObject("SAP.Functions")  
    R3.Connection.System = "PRT"  
    R3.Connection.ApplicationServer = "XXX.XX.XX.XX" 
    R3.Connection.Client = "400" 
    R3.Connection.SystemNumber = "00" 
    R3.Connection.User = "XX"
    R3.Connection.Password = "XX" 
    R3.Connection.Language = "EN" 
    R3.Connection.Codepage = "1100"

retcd = R3.Connection.Logon(1, True) 
If retcd <> True Then  
   MsgBox "Logon failure" 
Else 
   MsgBox "Logon success" 
End If

它工作正常,但效率低下,这就是我选择 Python 作为解决方法的原因。有人知道为什么 VBA 成功但 Python 失败了吗?

4

2 回答 2

1

“连接被拒绝”是标准的 TCP/IP 错误消息,表示端口号不正确。仔细检查,您的后端系统的 SystemNumber 是否真的是“00”。

于 2019-09-17T14:44:22.180 回答
0

此消息看起来像是网络问题:

拒绝连接

于 2018-11-19T11:21:30.913 回答