我选择了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= 用Unicode在本地主机XXX-XXXXXXX上定位CPIC (TCP/IP) 未到达错误合作伙伴“XXX.XXX:3300” 时间11月13日16:33:59 2018 第721版 组件NI (网络接口) 第40版 RC -10 模块nixxi.cpp 第3283项 DETAIL NiPConnect2: XXX.XXX:3300 系统呼叫连接 ERRNO 10061 ERRNO文本WSAECONNREFUSED:连接被拒绝 计数器2 MSG: 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失败了吗?
发布于 2019-09-17 14:44:22
“连接拒绝”是标准的TCP/IP错误消息,这意味着端口号不正确。再次检查,您的后端系统的SystemNumber是否真的是"00“。
发布于 2018-11-19 11:21:30
这条消息似乎是一个网络问题:
连接被拒绝
https://stackoverflow.com/questions/53293504
复制相似问题