Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am trying to create a SOAP web service to use with a client.

According to the documentation, we have to create a web service with two methods that return certain information. I have created them without a problem, but I can not get them to fit the example format.

I have to say that for years I did not create any SOAP services (since Net 2.0) because I have been doing REST services for a long, so if you see any nonsense, forgive me.

The example request that there is in the documentation (the good one) is this:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pag="http://pagorecibos.pagosrecibos.com/"> 
    <soapenv:Header/>
    <soapenv:Body>
        <pag:obtenerImporte>
            <referencia>040</referencia>
        </pag:obtenerImporte>
    </soapenv:Body>
</soapenv:Envelope>

That's the format that my service want to recieve:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <obtenerImporte xmlns="http://tempuri.org/">
      <referencia>string</referencia>
    </obtenerImporte>
  </soap:Body>
</soap:Envelope>

The code of my service is this:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service: System.Web.Services.WebService
    [WebMethod]
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
    public string ObtenerImporte(ObtenerImporte obtenerImporte)
        return "Hola a todos";
    [WebMethod]
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
    public string RealizarPago(RealizarPago realizarPago)
        return "Hola a todos";

Class (the other class is similar):

public class ObtenerImporte
    [XmlElement("referencia")]
    public string Referencia { get; set; }

The difference is in the namespace and the prefix in node "obtenerImporte" but I can't resolve it.

I'm using VS2017 Community Edition y created the project using "ASP.NET Web Service" template.

Just change http://tempuri.org/ to http://pagorecibos.pagosrecibos.com/ and that would make it essentially equivalent xml (that is, without imported namespace, but then who cares, your service should accept that top payload) – zaitsman Dec 27, 2017 at 9:18 Thanx for your answers. The problem is that the format is not equal and, when I try to make a request with the "original" format throws an error (sorry is in Spanish): System.Web.Services.Protocols.SoapException: No se puede controlar la solicitud sin un parámetro de acción válido. Proporcione una acción SOAP válida. en System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest() en System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) – Fernando Forcén Dec 27, 2017 at 9:36

Problem solved!!!. Adding and removing code.... suddenly it works :D. The right way to define the service is this (thanks @zaitsman for your clue):

[WebService(Namespace = "http://pagorecibos.pagosrecibos.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
    [WebMethod]
    [SoapDocumentMethod(Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]
    public string ObtenerImporte(ObtenerImporte obtenerImporte)
        return "Obtener Importe";
    [WebMethod]
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
    public string RealizarPago(RealizarPago realizarPago)
        return "Realizar Pago";

I hope that this solution could help other one.

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.