WebService除了比较常见的soap,restful等形式外,在.net平台下比较多的是wcf服务。
具体介绍可以参看MSDN里的描述。
如何对wcf服务接口进行测试,除了写.net代码外,还可以通过ironpython来实现(谁让ironpython就是python在.net平台上实现呢)
调用wcf服务,就需要知道wcf服务的这三个方面:
契约 。wcf规定,契约必须要以接口的方式来体现,实际的服务代码必须要由这些合约接口派生并实现)
绑定。WCF 支持HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式。
安全性。
了解了wcf以上的内容后,就可以进行调用了。
比如有一个wcf服务(http_binding的),契约都定义在IUserService中,它里面有一个方法是tmethod.
需要调用该wcf服务中的tmethod方法
import clr
clr.AddReference('System.ServiceModel')
from System.ServiceModel import (ServiceHost, BasicHttpBinding,NetTcpBinding,
ServiceBehaviorAttribute, InstanceContextMode,Description,SecurityMode,WSHttpBinding)
try:
clr.AddReference('Services.Contract')
except Exception,ex:
raise AssertionError("%s" % ex)
from Services.Contract import IUserService
sec_mode = System.ServiceModel.NetTcpSecurity()
sec_mode.Mode = System.ServiceModel.SecurityMode.None
#绑定
def basic_http_binding():
http_binding = System.ServiceModel.BasicHttpBinding()
http_binding.TextEncoding = Text.Encoding.UTF8
http_binding.MaxBufferPoolSize = 52428800
http_binding.ReceiveTimeout=TimeSpan(0, 1, 30)
http_binding.MaxReceivedMessageSize = 52428800
return http_binding
class TestWcf(object):
def __init__(self, service_url):
self.service_url = service_url
#createchannel的方式和C#类似,主要是ChannelFactory的使用
def __create_channel(self):
mycf = System.ServiceModel.ChannelFactory[IUserService](
basic_http_binding(),
System.ServiceModel.EndpointAddress(self.service_url))
wcfcli = mycf.CreateChannel()
return wcfcli
def test_tmethod(self):
rst = self.__create_channel().tmethod()
print rst
然后就可以实例化TestWcf类,然后调用test_tmethod来获取对应服务的返回值了
上面使用的是http_binding的形似,使用net_tcp_bing的一样的
sec_mode = System.ServiceModel.NetTcpSecurity()
sec_mode.Mode = System.ServiceModel.SecurityMode.None
def basic_net_tcp_binding():
tcp_binding = System.ServiceModel.NetTcpBinding()
tcp_binding.MaxBufferPoolSize = 52428800
tcp_binding.ReceiveTimeout=TimeSpan(0, 1, 30)
tcp_binding.MaxReceivedMessageSize = 52428800
tcp_binding.Security = sec_mode
return tcp_binding
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。