webservice,soap,wsdl的问题,请各位进来看看,300分酬谢....
以前提过一个类似的问题,以为自己已经得到解决,哪知行不通.
请大家看测试完整代码....
[WebService(Namespace = "http://tempuri.org/")]
//[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
public Service () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
[SoapRpcMethod(Use=System.Web.Services.Description.SoapBindingUse.Encoded)]
public void Test(Master master)
{
}
public class Master
{
public string Name;
[System.Xml.Serialization.XmlElement]
public List[] ListField;
}
public class List
{
public string Item;
}
}
得到的wsdl文件中描述为(一部分,主要是参数那块):
<s:complexType name="Master">
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="Name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" form="unqualified" name="ListField" type="s0:ArrayOfList" />
</s:sequence>
</s:complexType>
用xmlspy测试soap消息是:
<m:Test xmlns:m="http://tempuri.org/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<master xsi:type="m0:Master">
<Name xsi:type="xsd:string">String</Name>
<ListField xsi:type="SOAP-ENC:Array"/>
</master>
</m:Test>
然后发送请求到服务器,根本无法发出,会提示"无法将类型 System.Xml.XmlNode[] 的对象分配给类型 Service+List[] 的对象。"
但是我将webservice中的方法改成 [SoapRpcMethod(Use=System.Web.Services.Description.SoapBindingUse.Literal)]
生成的wsdl文件的描述为:
<s:complexType name="Master">
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
<s:element minOccurs="0" maxOccurs="unbounded" name="ListField" type="tns:List" />
</s:sequence>
</s:complexType>
用xmlspy请求soap消息为:
<m:Test xmlns:m="http://tempuri.org/">
<master>
<m:Name>String</m:Name>
<m:ListField>
<m:Item>String</m:Item>
</m:ListField>
</master>
</m:Test>
可以发送成功,但是目前对方并不支持Literal的方式,必须为Encoded方式,请大家帮我解决,谢谢.
如何在rpc+Encode方式下传递我类似上面描述的参数,并且用soap发送成功。请注意不要用.net的测试代码调用webservice的方法,是没有意义的,第一种方法,如果用代码调用也是可以行的,但是soap发送不了,对方根本传递不到数据过来。