ASMX SOAP Web服务创建复杂类型而不是简单类型

时间:2019-10-21 16:39:44

标签: c# asp.net wcf asmx

我正在使用C#ASMX创建SOAP Web服务。我有一种方法具有3个参数。 默认情况下,生成的WSDL创建了一个复杂类型。复杂类型称为HelloWorld。我想将3个参数直接附加到方法的根节点。如何在asmx中实现这一目标。

这是从我的Web服务生成的WSDL

<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="HelloWorld">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userid" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="data" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="HelloWorldResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>
<wsdl:message name="HelloWorldSoapIn">
<wsdl:part name="parameters" element="tns:HelloWorld"/>
</wsdl:message>
<wsdl:message name="HelloWorldSoapOut">
<wsdl:part name="parameters" element="tns:HelloWorldResponse"/>
</wsdl:message>

我想发生的是以下情况

<message name="resultIn">
<part name="userid" type="xsd:string"/>
<part name="password" type="xsd:string"/>
<part name="data" type="xsd:string"/>
</message>
<message name="resultOut">
<part name="return" type="xsd:string"/>
</message>

这是我的Web服务课程

namespace soapWebService
{
    /// <summary>
    /// Summary description for i3DrugScreenSOAP
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class testSOAP : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld(String userid, String password,String data)
        {
            return userid + password + data;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

找到了解决方法。它叫做soapParameterStyle

[WebMethod]
[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]

此外,我们必须将wsi配置文件关闭为“无”。

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

parameterStyle-指定如何将与WSDL合同中的消息部分相对应的方法参数放入SOAP消息主体中。

BARE的参数样式表示每个参数都作为消息根的子元素放入消息主体中。

WRAPPED的参数样式表示所有输入参数都包装在请求消息中的单个元素中,并且所有     输出参数被包装到响应消息中的单个元素中。