Python 2.7 Python2.7和wcf之间的双工通信

Python 2.7 Python2.7和wcf之间的双工通信,python-2.7,wcf,Python 2.7,Wcf,我是WCF的新手。我能够构建一个自托管WCF服务,并使用NetTcpBindings将4.NET应用程序连接到该服务。现在,我需要另外一个用Python2.7脚本编写的客户端来连接到这个提供双工通信的WCF服务 据我在谷歌上搜索,应该使用带有SOAP1.2的WsDualHttpBinding 这是我的服务界面 namespace GPH_QuickMessageServiceLib { /// <summary> /// GPH Quick Message Servi

我是WCF的新手。我能够构建一个自托管WCF服务,并使用NetTcpBindings将4.NET应用程序连接到该服务。现在,我需要另外一个用Python2.7脚本编写的客户端来连接到这个提供双工通信的WCF服务

据我在谷歌上搜索,应该使用带有SOAP1.2的WsDualHttpBinding

这是我的服务界面

namespace GPH_QuickMessageServiceLib
{
    /// <summary>
    /// GPH Quick Message Service Operations
    /// </summary>
    [ServiceContract(
        Name = "GPH_QuickMessageService",
        Namespace = "GPH_QuickMessageServiceLib",
        SessionMode = SessionMode.Required,
        CallbackContract = typeof(IMessageServiceCallback))]

    public interface IMessageServiceInbound
    {
        [OperationContract]
        [WebInvoke]
        int JoinTheConversation(string userName);
        [OperationContract]
        [WebInvoke]
        int LeaveTheConversation(string userName);
    }

    public interface IMessageServiceCallback
    {
        [OperationContract(IsOneWay = true)]
        [WebInvoke]
        void NotifyUserJoinedTheConversation(string userName, List<string> SubscriberList);
        [OperationContract(IsOneWay = true)]
        [WebInvoke]
        void NotifyUserLeftTheConversation(string userName, List<string> SubscriberList);
    }
}
我猜,我的python客户机已经绑定到服务器并获取可用操作的列表,但它无法从这些操作中获取结果。它总是不返回任何值

C:\Python27\python.exe C:/Users/sev_user/PycharmProjects/WcfInteration/venv/Scripts/suds_client.py
DEBUG:suds.client:sending to (http://localhost:2709/GPH_QuickMessageService/soap/soap)
message:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="GPH_QuickMessageServiceLib" xmlns:ns1="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:JoinTheConversation>
         <ns0:userName>RIDE</ns0:userName>
      </ns0:JoinTheConversation>
   </ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': '"GPH_QuickMessageServiceLib/GPH_QuickMessageService/JoinTheConversation"', 'Content-Type': 'application/soap+xml'}

Suds ( https://fedorahosted.org/suds/ )  version: 0.6

Service ( GPH_QuickMessageService ) tns="http://tempuri.org/"
   Prefixes (3)
      ns0 = "GPH_QuickMessageServiceLib"
      ns1 = "http://schemas.microsoft.com/2003/10/Serialization/"
      ns2 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"
   Ports (2):
      (WSDualHttpBinding_GPH_QuickMessageService)
         Methods (7):
            JoinTheConversation(xs:string userName)
            LeaveTheConversation(xs:string userName)
            NotifyUserJoinedTheConversation()
            NotifyUserLeftTheConversation()
            NotifyUserOfMessage()
            ReceiveMessage(xs:string userName, ns2:ArrayOfstring addressList, xs:string userMessage)
            sum(xs:int a, xs:int b)
         Types (4):
            ns2:ArrayOfstring
            ns1:char
            ns1:duration
            ns1:guid
      (NetTcpBinding_GPH_QuickMessageService)
         Methods (7):
            JoinTheConversation(xs:string userName)
            LeaveTheConversation(xs:string userName)
            NotifyUserJoinedTheConversation()
            NotifyUserLeftTheConversation()
            NotifyUserOfMessage()
            ReceiveMessage(xs:string userName, ns2:ArrayOfstring addressList, xs:string userMessage)
            sum(xs:int a, xs:int b)
         Types (4):
            ns2:ArrayOfstring
            ns1:char
            ns1:duration
            ns1:guid


result = None
DEBUG:suds.client:HTTP succeeded:


Process finished with exit code 0
C:\Python27\python.exe C:/Users/sev_user/PycharmProjects/WcfInteration/venv/Scripts/suds_client.py
调试:suds.client:发送到(http://localhost:2709/GPH_QuickMessageService/soap/soap)
信息:
骑
调试:suds.client:headers={'SOAPAction':''GPH_QuickMessageServiceLib/GPH_QuickMessageService/JoinTheConversation','Content Type':'application/soap+xml'}
肥皂水(https://fedorahosted.org/suds/ )版本:0.6
服务(GPH_QuickMessageService)tns=”http://tempuri.org/"
前缀(3)
ns0=“GPH\U QuickMessageServiceLib”
ns1=”http://schemas.microsoft.com/2003/10/Serialization/"
ns2=”http://schemas.microsoft.com/2003/10/Serialization/Arrays"
端口(2):
(WSDualHttpBinding\u GPH\u QuickMessageService)
方法(7):
JoinTheConversation(xs:string用户名)
离开会话(xs:string用户名)
NotifyUserJoinedTheConversation()
NotifyUserLeftTheConversation()
NotifyUserOfMessage()
ReceiveMessage(xs:string用户名,ns2:ArrayOfstring地址列表,xs:string用户消息)
总和(xs:int a,xs:int b)
类型(4):
ns2:ArrayOfstring
ns1:字符
ns1:持续时间
ns1:guid
(NetTcpBinding\u GPH\u QuickMessageService)
方法(7):
JoinTheConversation(xs:string用户名)
离开会话(xs:string用户名)
NotifyUserJoinedTheConversation()
NotifyUserLeftTheConversation()
NotifyUserOfMessage()
ReceiveMessage(xs:string用户名,ns2:ArrayOfstring地址列表,xs:string用户消息)
总和(xs:int a,xs:int b)
类型(4):
ns2:ArrayOfstring
ns1:字符
ns1:持续时间
ns1:guid
结果=无
调试:suds。客户端:HTTP成功:
进程已完成,退出代码为0
除肥皂水外,我还尝试了其他几种方法,例如,但结果总是为“无”或“0”。我在这些SOAP客户机进程上附加了记录器,并且总是得到“HTTP成功”或“202接受”。我自己也不知道这里到底出了什么问题

有没有人面临同样的问题?请给我一些线索来解决这个问题

或者任何其他在Python2.7和WCF之间实现双工通信的想法都是值得赞赏的

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <system.serviceModel>
    <services>
      <service name="GPH_QuickMessageServiceLib.GPH_QuickMessageService"
        behaviorConfiguration = "QuickMessageServiceMEXBehavior">
        <endpoint address ="soap"
                  binding="wsDualHttpBinding"
                  contract="GPH_QuickMessageServiceLib.IMessageServiceInbound" />
        <endpoint address ="service"
                  binding="netTcpBinding"
                  contract="GPH_QuickMessageServiceLib.IMessageServiceInbound" />
        <!-- Enable the MEX endpoint -->
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />

        <!-- Need to add this so MEX knows the address of our service -->
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:2709/GPH_QuickMessageService/soap"/>
            <add baseAddress="net.tcp://localhost:8868/GPH_QuickMessageService"/>
          </baseAddresses>
        </host>

      </service>
    </services>
    <!-- A behavior definition for MEX -->
    <behaviors>
      <serviceBehaviors>
        <behavior name="QuickMessageServiceMEXBehavior" >
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
from suds.client import Client
from suds.bindings import binding
import logging

# Just for debugging purposes.
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)

# Telnic's SOAP server expects a SOAP 1.2 envelope, not a SOAP 1.1 envelope
# and will complain if this hack isn't done.
binding.envns = ('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')
client = Client('http://localhost:2709/GPH_QuickMessageService/soap?wsdl',
    headers={'Content-Type': 'application/soap+xml'})

# This will now work just fine.
result = client.service.JoinTheConversation('RIDE')

print client
print 'result = %s' % result
C:\Python27\python.exe C:/Users/sev_user/PycharmProjects/WcfInteration/venv/Scripts/suds_client.py
DEBUG:suds.client:sending to (http://localhost:2709/GPH_QuickMessageService/soap/soap)
message:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="GPH_QuickMessageServiceLib" xmlns:ns1="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:JoinTheConversation>
         <ns0:userName>RIDE</ns0:userName>
      </ns0:JoinTheConversation>
   </ns1:Body>
</SOAP-ENV:Envelope>
DEBUG:suds.client:headers = {'SOAPAction': '"GPH_QuickMessageServiceLib/GPH_QuickMessageService/JoinTheConversation"', 'Content-Type': 'application/soap+xml'}

Suds ( https://fedorahosted.org/suds/ )  version: 0.6

Service ( GPH_QuickMessageService ) tns="http://tempuri.org/"
   Prefixes (3)
      ns0 = "GPH_QuickMessageServiceLib"
      ns1 = "http://schemas.microsoft.com/2003/10/Serialization/"
      ns2 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays"
   Ports (2):
      (WSDualHttpBinding_GPH_QuickMessageService)
         Methods (7):
            JoinTheConversation(xs:string userName)
            LeaveTheConversation(xs:string userName)
            NotifyUserJoinedTheConversation()
            NotifyUserLeftTheConversation()
            NotifyUserOfMessage()
            ReceiveMessage(xs:string userName, ns2:ArrayOfstring addressList, xs:string userMessage)
            sum(xs:int a, xs:int b)
         Types (4):
            ns2:ArrayOfstring
            ns1:char
            ns1:duration
            ns1:guid
      (NetTcpBinding_GPH_QuickMessageService)
         Methods (7):
            JoinTheConversation(xs:string userName)
            LeaveTheConversation(xs:string userName)
            NotifyUserJoinedTheConversation()
            NotifyUserLeftTheConversation()
            NotifyUserOfMessage()
            ReceiveMessage(xs:string userName, ns2:ArrayOfstring addressList, xs:string userMessage)
            sum(xs:int a, xs:int b)
         Types (4):
            ns2:ArrayOfstring
            ns1:char
            ns1:duration
            ns1:guid


result = None
DEBUG:suds.client:HTTP succeeded:


Process finished with exit code 0