Como passar credenciais no Header para os serviços SOAP?

Boa noite amigos. Preciso de mais uma grande ajuda de vocês!

Consegui importar o WSDL, contudo a documentação da vTex não ajuda muito quando precisamos saber como passar os dados de autenticação através de nossa aplicação para o serviço.

Estou tentando fazer algo parecido com isso em C#:

var service = new ServiceClient(); service.ClientCredentials.UserName.UserName = "vtexappkey"; service.ClientCredentials.UserName.Password = "DYVFJBIQN"; return service.ProductGetByRefId("55555");

Configurei o ```basicHttpBinding``` do meu aplicativo da seguinte forma:

<basicHttpBinding> <binding name="BasicHttpBinding_IService"> <security mode="TransportWithMessageCredential"> <message clientCredentialType="UserName" /> </security> </binding> </basicHttpBinding>

E coloquei o endpoint como https (requerido quando adicionamos o security).

E continuo tomando o 401...

Alguém poderia me ajudar!?

Muito obrigado!

Bem, tive que usar o InnerChannel...

Segue a solução:

public ProdutoDTO ObterProduto(string usuario, string senha) { var serviceClient = new ServiceClient(); if (serviceClient.ClientCredentials == null) { throw new Exception("ClientCredentials não definido para o serviceClient"); } serviceClient.ClientCredentials.UserName.UserName = usuario; serviceClient.ClientCredentials.UserName.Password = senha; using (new OperationContextScope(serviceClient.InnerChannel)) { var auth = "Basic {Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(usuario + ":" + senha))}"; var requestMessage = new HttpRequestMessageProperty(); requestMessage.Headers["Authorization"] = auth; OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage; return serviceClient.ProductGetByRefId("55555"); } }

Espero ter ajudado!