使用Zeep调用Business Central自定义SOAP端点遇service not found错误
自定义Business Central SOAP端点调用问题
实现代码
我正尝试让自定义的Business Central SOAP端点正常工作,代码如下:
import os from requests import Session from requests.auth import HTTPBasicAuth from zeep import Client from zeep.transports import Transport user = os.environ.get("BC_USER") password = os.environ.get("BC_PASSWORD") session = Session() session.auth = HTTPBasicAuth(user, password) url = "https://foo.bar/Company%20Name/Codeunit/MyOperation" client = Client(url, transport=Transport(session=session)) client.service.MyOperation("baz")
运行报错
执行代码后出现如下错误:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/j/.local/lib/python3.8/site-packages/zeep/proxy.py", line 46, in __call__ return self._proxy._binding.send( File "/home/j/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 135, in send return self.process_reply(client, operation_obj, response) File "/home/j/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 229, in process_reply return self.process_error(doc, operation) File "/home/j/.local/lib/python3.8/site-packages/zeep/wsdl/bindings/soap.py", line 329, in process_error raise Fault( zeep.exceptions.Fault: Service "Company Name/Codeunit/MyOperation" was not found!
WSDL解析结果
执行python3 -m zeep "https://foo.bar/Company%20Name/Codeunit/MyOperation"命令解析WSDL,返回内容如下:
Prefixes: xsd: http://www.w3.org/2001/XMLSchema ns0: urn:microsoft-dynamics-schemas/codeunit/MyOperation Global elements: ns0:MyOperation(serialNo: xsd:string) ns0:MyOperation_Result(return_value: xsd:string) Global types: [...] Bindings: Soap11Binding: {urn:microsoft-dynamics-schemas/codeunit/GetItemOptionsFromSerial}MyOperation_Binding Service: MyOperation Port: MyOperation_Port (Soap11Binding: {urn:microsoft-dynamics-schemas/codeunit/MyOperation}MyOperation_Binding) Operations: MyOperation(serialNo: xsd:string) -> return_value: xsd:string
疑问与补充测试
观察到OperationProxy实际调用的路径是company/codeunit/myoperation而非myoperation,请问这是缺少绑定导致的?还是需要创建新服务?
另外尝试无参调用验证服务是否存在时,出现如下错误:
client.service.MyOperation() zeep.exceptions.ValidationError: Missing element "baz" (MyOperation.baz)
内容的提问来源于stack exchange,提问作者PatrickBateman
相关产品推荐
相关产品推荐

