You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:22:39