sábado, 29 de janeiro de 2011

Depurando WebServices

Olá Pessoal,

Nesse ultimo mês tive que fazer alguns workarounds para conseguir finalizar um trabalho de integração com o Salesforce, pois bem, aqui vão algumas dicas.

Para capturar os pacotes enviados para os webservices com os clientes C# e Java:

Utilizar o Wireshark para captura dos pacotes, porém caso seja https o soap estará criptografado, o que não irá adiantar de muita coisa, então simplesmente mude o caminho de destino https:// para http://, isso vai fazer com que o servidor recuse o seu pacote, mas já ajuda pra verificar se o envelope soap está enviando os dados corretos.

Verificando os pacotes descobri que realmente tinha coisa errada no C#, devido a propriedade no elemento que não estava sendo enviado no WSDL estar com  minOccurs="0"  o C# simplesmente não enviava os elementos boleanos.

Descoberto isso foi fácil, bastou remover esse atributo do wsdl que a comunicação com o servidor foi realizada com sucesso.

Outra forma de capturar os pacotes, mas nesse caso somente no cliente C#, é habilitar o trace no web.config

<system.diagnostics>
        <trace autoflush="true"/>
        <sources>
            <source name="System.Net"  >
                <listeners>
                    <add name="TraceFile"/>
                </listeners>
            </source>
            <source name="System.Net.Sockets" >
                <listeners>
                    <add name="TraceFile"/>
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/>
        </sharedListeners>
        <switches>
            <add name="System.Net" value="Verbose"/>
            <add name="System.Net.Sockets" value="Verbose"/>
        </switches>
    </system.diagnostics>

Nenhum comentário: