Pergunta

O formulário de teste gerado por ASMX é bastante útil para operações de teste. No entanto, não há nenhuma maneira aparente para incluir cabeçalhos SOAP.

Como você pode testar seus cabeçalhos sem programar um cliente para usar o serviço?

Foi útil?

Solução

Se você se preocupa com interoperabilidade, não use aplicativos cliente .NET para serviços web de teste .net. Use uma ferramenta adequada como SOAPUI para testar seu serviço web. www.soapui.org

A ferramenta é escrito em Java, mas é livre e danado útil para testar qualquer tipo de serviço web.

Outras dicas

Se eu entendo o que você está tentando fazer, você pode pode apenas fazer uma solicitação HTTP usando o SOAP que é fornecido pelo seu asmx. Se você abrir seu asmx no broswer, você obter uma lista de métodos disponíveis em seu serviço web. Clique no método que você deseja testar e você receberá uma solicitação SOAP que você pode usar, basta preencher os valores que você deseja testar. Abaixo está o código que você pode usar para testar a SOAP.

// Set SOAP Message
string msg = "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope>";
...
...

// Make http request
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://linktoyour/service.asmx");

req.Headers.Add("SOAPAction", "http://linktoyour/NameOfFuntion");

req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);

req.ContentLength = bytes.Length;

System.IO.Stream st = req.GetRequestStream();
st.Write(bytes,0,bytes.Length);
st.Close();

// Read response
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
System.IO.Stream st1 = res.GetResponseStream();

System.IO.StreamReader sr = new System.IO.StreamReader(st1, System.Text.Encoding.UTF8);

string txt = sr.ReadToEnd();

// Display response
Response.Write(txt);

Você pediu

Como você pode testar seus cabeçalhos sem programar um cliente para usar o serviço?

A resposta é que você deve programar um cliente para usar o serviço.

Os desenvolvedores que vai escrever o código para consumir o seu serviço vai ser forçado a escrever um cliente que utiliza o seu, difícil de usar serviço mal-projetado com seus cabeçalhos estranhos. É melhor você descobrir mais sobre {mal concebido, de usar dura, estranha} antes que eles fazem.

Dessa forma, você pode redesenhar o serviço a ser {bem concebido, o prazer de usar, normal,}.

BTW, escrever testes de unidade para o seu serviço web é uma boa maneira de fazer isso. Dessa forma, você tem pequeno, simples, os clientes.

Em vez de acessar diretamente os cabeçalhos, fornecer uma abstração que seu código acessa em seu lugar. Por exemplo, se você tem um cabeçalho chamado "Cliente", que você pode fornecer uma classe de contexto você pode acessar assim:

string cliente = MyContext.Current.Customer;

Agora, tudo que você tem a fazer é trocar em uma implementação simulada em suas classes de teste que não necessita de todo o encanamento.

Note, no entanto, que os testes ASMX fora de um servidor web não é exatamente ideal, uma vez que pode perder coisas como serialização. Se você pudesse implantar em um servidor de teste e testar a cópia implantada, você seria melhor. Se você realmente se preocupam com os testes, WCF é uma opção melhor, pois você pode se auto WCF acolhimento bastante facilidade em testes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top