Я новичок в веб-сервисах, мне пришлось отправить файл с помощью веб-сервиса и поймать ответ, моя проблема в том, что я не могу сгенерировать действительный заголовок SOAP. я использую c # WCF visual studio 2017
Потребляемый веб-сервис: https://facturaelectronica.dian.gov.co/habilitacion/B2BIntegrationEngine/FacturaElectronica/facturaElectronica.wsdl
Спецификации для заголовка согласно документации от провайдера:
Пример запроса с использованием Base64
POST /B2BIntegrationEngine/FacturaElectronica HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "" Content-Length: 3342 Host: 192.168.250.65:9080 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Но когда я пытаюсь сгенерировать его, я получаю только это:
Вот что я делаю:
public string GeneraHeaderSOAP()
{
const string apiUrl = "https://facturaelectronica.dian.gov.co/habilitacion/B2BIntegrationEngine/FacturaElectronica",
apiUserName = "Username";
string Password = "Password";
string apiPassword = GetPassword(Password);
EndpointAddress endpointAddress = new EndpointAddress(new Uri(apiUrl));
SecurityBindingElement securityElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
securityElement.AllowInsecureTransport = false;
securityElement.EnableUnsecuredResponse = true;
securityElement.IncludeTimestamp = false;
TextMessageEncodingBindingElement encodingElement = new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8);
HttpsTransportBindingElement transportElement = new HttpsTransportBindingElement();
CustomBinding binding = new CustomBinding(securityElement, encodingElement, transportElement);
//basic prueba
BasicHttpSecurityMode securityMode = new BasicHttpSecurityMode();
BasicHttpBinding binding2 = new BasicHttpBinding(securityMode);
// Then assign username and password based on the proxy. For example -
//var remoteAddress = new EndpointAddress("");
WSDian.facturaElectronicaPortNameClient service = new WSDian.facturaElectronicaPortNameClient(binding, endpointAddress);
//WSDian.facturaElectronicaPortNameClient service = new WSDian.facturaElectronicaPortNameClient(binding2, endpointAddress);
service.ClientCredentials.UserName.UserName = apiUserName;
service.ClientCredentials.UserName.Password = apiPassword;
var Obtnonce = GetNonce();
byte[] archivo = FileToByteArray(@"c:\temp\ws_f0816002834000000000A.zip");
service.Open();
WSDian.EnvioFacturaElectronica enviofactura = new WSDian.EnvioFacturaElectronica();
enviofactura.NIT = "816006634";
enviofactura.InvoiceNumber = "10";
enviofactura.IssueDate = Convert.ToDateTime("2018-01-01 05:00:00");
enviofactura.Document = archivo;
//temporal
WSDian.EnvioFacturaElectronicaPeticion envioFacturaElectronicaPeticion = new WSDian.EnvioFacturaElectronicaPeticion();
WSDian.EnvioFacturaElectronicaRespuesta envioFacturaElectronicaRespuesta = new WSDian.EnvioFacturaElectronicaRespuesta();
WSDian.AcuseRecibo acuseRecibo = new WSDian.AcuseRecibo();
WSDian.ReceivedInvoice receivedInvoice = new WSDian.ReceivedInvoice();
WSDian.facturaElectronicaPortNameClient facturaElectronicaPortNameClient = new WSDian.facturaElectronicaPortNameClient();
envioFacturaElectronicaPeticion.EnvioFacturaElectronicaPeticion1 = enviofactura;
var versionSoap = acuseRecibo.GetType();
acuseRecibo = service.EnvioFacturaElectronica(envioFacturaElectronicaPeticion.EnvioFacturaElectronicaPeticion1);
}
Я добавляю ссылку на веб-сервис, чтобы использовать его, но когда я отлаживаю свой код, я получаю эту ошибку:
StatusCode = 400, StatusDescription = Неверный запрос.
Я не могу сгенерировать SOAP-запрос в соответствии со спецификациями, помогите.
Спасибо.