def OpenProxy(url):
from SOAPpy import WSDL
proxy = WSDL.Proxy(url)
proxy.soapproxy.config.dumpHeadersIn = 1
proxy.soapproxy.config.dumpHeadersOut = 1
proxy.soapproxy.config.dumpSOAPIn = 1
proxy.soapproxy.config.dumpSOAPOut = 1
proxy.soapproxy.config.debug = 9
return proxy
proxy = OpenProxy( " http://localhost:1137/Web/Test/Service.asmx?WSDL " )
proxy.Test( 345 )
from SOAPpy import WSDL
proxy = WSDL.Proxy(url)
proxy.soapproxy.config.dumpHeadersIn = 1
proxy.soapproxy.config.dumpHeadersOut = 1
proxy.soapproxy.config.dumpSOAPIn = 1
proxy.soapproxy.config.dumpSOAPOut = 1
proxy.soapproxy.config.debug = 9
return proxy
proxy = OpenProxy( " http://localhost:1137/Web/Test/Service.asmx?WSDL " )
proxy.Test( 345 )
写ASP.net服务器,vs中创建一个简单的Test方法:
[WebService(Namespace
=
"
http://tempuri.org/
"
)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1 )]
[SoapDocumentService(Use = System.Web.Services.Description.SoapBindingUse.Encoded)]
public class Service : System.Web.Services.WebService
{
public Service()
{
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod(CacheDuration=0)]
public int Test(int a)
{
return a + 1;
}
}
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1 )]
[SoapDocumentService(Use = System.Web.Services.Description.SoapBindingUse.Encoded)]
public class Service : System.Web.Services.WebService
{
public Service()
{
}
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod(CacheDuration=0)]
public int Test(int a)
{
return a + 1;
}
}
[SoapDocumentService(Use = System.Web.Services.Description.SoapBindingUse.Encoded)]是出现问题的地方:
在未添加之前,Test 返回的结果总是 1 ,a 的值未设置。python 的传递的参数未正确解析。看了python调试信息,把 proxy.Test(123)改成了proxy.Test(a=123),重新调用,xml请求的字段对了,但是 .net服务返回还是0。
在http://mail.python.org/pipermail/xml-sig/2004-November/010733.html看到一些信息,按照上面的说明,加了[SoapDocumentService(Use=System.Web.Services.Description.SoapBindingUse.Encoded)],结果正确了,却不懂为什么。
第一天是用SOAP,问题还真多!