SOAP请求格式

时间:2017-12-27 09:15:48

标签: c# soap

我正在尝试创建一个与客户端一起使用的SOAP Web服务。

根据文档,我们必须使用两种返回特定信息的方法创建一个Web服务。我创建它们没有问题,但我不能让它们适合示例格式。

我不得不说多年来我没有创建任何SOAP服务(因为Net 2.0),因为我已经做了很长时间的REST服务,所以如果你看到任何废话,请原谅我。

文档中的示例请求(好的)是:

<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>

这是我的服务想要接收的格式:

<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>

我的服务代码是:

[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(另一个类相似):

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

区别在于名称空间和节点中的前缀&#34; obtenerImporte&#34;但是我无法解决它。

我使用VS2017社区版y使用&#34; ASP.NET Web Service&#34;创建项目。模板。

1 个答案:

答案 0 :(得分:0)

问题解决了!添加和删​​除代码....突然它起作用:D。定义服务的正确方法是这个(感谢@zaitsman提供线索):

[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";
    }
}

我希望这个解决方案可以帮助其他人。