Веб-служба ASMX SOAP создает сложные типы вместо простых типов - PullRequest
1 голос
/ 21 октября 2019

Я создаю веб-службу SOAP с использованием C # ASMX. У меня есть один метод, который имеет 3 параметра. Сгенерированный WSDL создал сложный тип по умолчанию. Сложный тип называется HelloWorld. Я хочу присоединить 3 параметра непосредственно к корневому узлу метода. Как добиться этого в asmx.

Вот сгенерированный 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>

Вотмой класс веб-сервиса

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 Ответ

2 голосов
/ 21 октября 2019

Нашли исправление. Он называется soapParameterStyle

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

Кроме того, мы должны отключить профили wsi на None.

[WebServiceBinding(ConformsTo = WsiProfiles.None)]

parameterStyle - Определяет, как параметры метода, которые соответствуют частям сообщения вКонтракт WSDL помещается в тело сообщения SOAP.

Стиль параметра BARE означает, что каждый параметр помещается в тело сообщения как дочерний элемент корня сообщения.

Стиль параметраWRAPPED означает, что все входные параметры заключены в один элемент в сообщении запроса и что все выходные параметры заключены в один элемент в ответном сообщении.

...