创建了一个.net 4控制台应用程序,并添加了一个Web参考(名为FACE),以便创建代理功能。 WSDL服务是一个公共API:
https://webservice.face.gob.es/facturasspp?wsdl
然后我使用此脚本调用Web服务:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"C:\DATA\cer.pfx", "MyPass*");
FACE.ConsultarEstadosResponse respuesta;
FACE.Service servicio = new GestionaFACE.Service();
try
{
servicio.ClientCertificates.Add(cert);
respuesta = servicio.consultarEstados();
}
catch
{
Console.WriteLine(servicio.Url);
}
}
}
}
但是,我从服务获得以下响应:
104 无需构建任何通用的SOAP标头:没有安全的SOAP标头
这意味着缺少SOAP标头。我希望Visual Studio自动创建正确的标头,因为它具有WSDL定义并为该服务创建了一个代理。
另外,当使用servicio.ClientCertificates.Add(cert)将证书添加到调用中时,我的想法是将信息添加到SOAP标头中。
我可以在Reference.cs中看到FACE.service类创建为
public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol {
关于如何解决此问题或使用其他方法的任何想法?我正在使用Visual Studio 2010 Express