我正在尝试创建一个与客户端一起使用的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;创建项目。模板。
答案 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";
}
}
我希望这个解决方案可以帮助其他人。