最近,我计划使用Python通过RFC从SAP提取数据。我在互联网上搜索并选择PyRFC库来完成任务。除连接外,其他一切正常。该代码停止并在连接到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上的LOCATION CPIC(TCP / IP)
未达到错误的合作伙伴“ XXX.XXX.XXX.XXX:3300”
TIME Tue Nov 13 13 16:33:59 2018
发布721
COMPONENT NI(网络接口)
版本40
RC -10
MODULE nixxi.cpp
LINE 3283
详细信息NiPConnect2:XXX.XXX.XXX.XXX:3300
系统调用连接
ERRNO 10061
错误文本WSAECONNREFUSED:连接被拒绝
COUNTER 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失败了。
我被困在这里几天,有人能为我解决吗?
谢谢〜
答案 0 :(得分:0)
此消息似乎是网络问题:
连接被拒绝
答案 1 :(得分:0)
“拒绝连接”是标准的TCP / IP错误消息,表示端口号不正确。仔细检查您的后端系统的SystemNumber是否真的为“ 00”。