Estou com uma situação em que preciso fazer uma engenharia reversa, pois a máquina que consome o meu serviço é inalterável então preciso preparar o meu serviço para ler o xml que já está pronto. O problema é que a tag que corresponde ao método contém um namespace :
<ns2095:login4 xmlns:ns2095="http://tempuri.org">
Com isso eu resolvi o problema adicionando o namespace ao meu service contract:
[ServiceContract(Namespace = "http://tempuri.org")]
O problema é que a tag filha que corresponde ao parâmetro a ser recebido pelo serviço não tem o namespace no xml:
<__numeric_0>
O que acontece é que o objeto é recebido null e só consegui resolver se eu adiconar o namespace na tag do xml também:
<ns2095:__numeric_0>
Porém eu não tenho como mudar o xml, então tentei definir no DataContract para ignorar o namespace, mas não funcionou:
[DataContract(Namespace = "", Name = "__numeric_0")]
Código completo:
Xml enviado ao serviço:
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns2095:login4 xmlns:ns2095="http://tempuri.org">
<__numeric_0>
...
</__numeric_0>
</ns2095:login4>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Service Contract:
[ServiceContract(Namespace = "http://tempuri.org")]
public interface ISimulador
{
[OperationContract(Name = "login4")]
LoginResponse SolicitarLogin(LoginRequest __numeric_0);
}
Data Contract:
[DataContract(Namespace = "", Name = "__numeric_0")]
[KnownType(typeof(LoginRequest))]
[KnownType(typeof(SimInfo))]
public class LoginRequest
{
}
Teria uma forma de configurar para o serviço ignorar este namespace no <__numeric_0>?