WCF和Python

bha*_*dra 24 python wcf

有没有可以调用Windows Communication Foundation(WCF)服务的cpython(而不是IronPython)客户端的示例代码?

r3n*_*rut 19

我用.

from suds.client import Client

print "Connecting to Service..."
wsdl = "http://serviceurl.com/service.svc?WSDL"
client = Client(wsdl)
result = client.service.Method(variable1, variable2)
print result
Run Code Online (Sandbox Code Playgroud)

这应该让你开始.我能够从WCF和RESTful层连接到公开的服务.需要进行一些数据按摩来帮助您完成所需的操作,尤其是在您需要绑定到多个命名空间时.


Dan*_*Dan 8

WCF需要通过通信协议公开功能.我认为最常用的协议可能是SOAP over HTTP.让我们假设那就是你正在使用的东西.

看看Dive Into Python中的这一章.它将向您展示如何进行SOAP调用.

我知道没有统一的方法在Python中调用WCF服务,无论通信协议如何.

  • 我只有basicHttpBinding才能工作.如果有人知道如何让wsHttpBinding工作,请在这里发布. (3认同)

Chr*_*Wue 8

TL;DR:对于 wsHttpBinding (SOAP 1.2) 使用zeep


如果有人在 WCF 和 wsHttpBinding(即 SOAP 1.2)中使用 suds(或 suds-jurko)时遇到问题:

  • suds 几乎死了(甚至不能在 python 3 上安装它)
  • suds-jurko 似乎已经死了。0.6 版本有一个非常烦人的无限递归错误(至少在我们的服务公开的 WSDL 上),该错误已在提示中修复,但尚未发布,自上次发布以来已经过去了 1.5 年(在 2017 年 2 月撰写本文时)犯罪。
    它适用于 python 3,但不支持 SOAP 1.2。Sovetnikov 的回答是试图让它与 1.2 一起工作,但我还没有设法让它对我有用。
  • zeep 似乎是目前的开箱即用方式(我不隶属于 zeep,它只对我有用,我花了几个小时把头撞在砖墙上试图让泡沫发挥作用)。要使 zeep 正常工作,WCF 服务主机配置必须在 wsHttpBinding 节点下包含 <security mode="None"/>实际上 zeep 似乎支持基于用户名和签名 (x509) 的 WS-SE,但我还没有尝试过,所以可以'不要谈论它周围的任何问题。