Durante o desenvolvimento de um cliente de Web Services é muito comum necessitarmos enviar mensagens de teste ao servidor, necessitando a alteração rápida do conteúdo, podendo inclusive inserir novas tags. Esse tipo de alteração também é útil durante a identificação de problemas relacionados a classe TWsdlManager, que pode não identificar corretamente algum elemento o tipo declarado no WSDL.
Para tanto podemos utilizar o recurso de envio de mensagens personalizadas da classe TWsdlManager, através do método SendSoapMsg. A mensagem deve ser montada em uma variável do tipo caractere e será enviada ao servidor sem qualquer tipo de verificação prévia. A variável caractere com a mensagem pode ser manipulada livremente.
Para mais informações sobre o envio, verifique a documentação do método SendSoapMsg. Abaixo podemos ver um exemplo de envio de mensagem personalizada enviada a um servidor.
User Function Teste() Local oWsdl Local xRet Local cMsg := "" // Cria o objeto da classe TWsdlManager oWsdl := TWsdlManager():New() // Faz o parse de uma URL xRet := oWsdl:ParseURL( "http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL" ) if xRet == .F. conout( "Erro: " + oWsdl:cError ) return .F. endif // Define a operação xRet := oWsdl:SetOperation( "GetCityForecastByZIP" ) if xRet == .F. conout( "Erro: " + oWsdl:cError ) Return endif // Monta uma mensagem SOAP personalizada cMsg := "<?xml version='1.0' encoding='UTF-8' standalone='no' ?>" cMsg += '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" ' cMsg += 'xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" ' cMsg += 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' cMsg += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' cMsg += 'xmlns:ns1="http://ws.cdyne.com/WeatherWS/">' cMsg += '<SOAP-ENV:Body>' cMsg += '<GetCityForecastByZIP xmlns="http://ws.cdyne.com/WeatherWS/">' cMsg += '<ZIP>22313</ZIP>' cMsg += '</GetCityForecastByZIP>' cMsg += '</SOAP-ENV:Body>' cMsg += '</SOAP-ENV:Envelope>' // Envia uma mensagem SOAP personalizada ao servidor xRet := oWsdl:SendSoapMsg( cMsg ) if xRet == .F. conout( "Erro: " + oWsdl:cError ) return .F. endif return .T.