Mostrando postagens com marcador WebService. Mostrar todas as postagens
Mostrando postagens com marcador WebService. Mostrar todas as postagens

28 de fevereiro de 2019

Teste e Debug de WebService em Máquina Remota

Durante o desenvolvimento de WebService o Visual Studio facilita o teste e debug na própria Interface de desenvolvimento, mas esta facilidade funciona somente quando estamos fazendo o teste na máquina de desenvolvimento utilizando o http://localhost.

Quando por algum motivo precisamos fazer um teste ou simplesmente verificar se um WebService esta respondendo em uma máquina remota não é possível utilizar o browser com a URL do WebService, pois por questões de segurança os métodos e funções do webService não estão acessíveis na máquina remota.

Podemos fazer uma alteração no arquivo Web.Config do WebService para liberar o acesso aos métodos e funções do WebService em um browser.

Para liberar o acesso para teste dos métodos e funções do WebService basta incluir o HttpGet e HttpPost na tag <system.web> do WebService.

    <system.web>
      <webServices>
        <protocols>
          <add name="HttpPost" />
          <add name="HttpGet" />
        </protocols>
      </webServices>
    </system.web>

Depois de executado todos os testes necessários altere a configuração para remover o acesso ao HttpPost e HttpGet.

    <system.web>
      <webServices>
        <protocols>
          <remove name="HttpPost" />
          <remove name="HttpGet" />
        </protocols>
      </webServices>
    </system.web>

Não esquecer de desabilitar o acesso ao HttpPost e HttpGet depois dos testes. Isto é muito importante por questões de segurança.

17 de março de 2011

Como Retornar Dados em Json com WebService .NET

O webservice .NET retorna as informações utilizando o protocolo SOAP e os dados em formato XML. Este artigo mostra como retornar os dados no formato JSON, utilizando um webservice na versão 3.5 do .NET Framework.

Para mostrar como retornar dados no formato JSON,  foi criado um webservice que retorna a relação de Estados do Brasil, juntamente com as informações de capital, área em km2 e abreviação de cada estado.

Para que o webservice retorne os dados em JSON é necessário inserir o atributo [System.Web.Script.Services.ScriptService] na classe do webservice (linha 4) e o atributo     [ScriptMethod(ResponseFormat=ResponseFormat.Json)] (linha 45) no método que vai retornar os dados, como demonstrado no código abaixo:

   1:  [WebService(Namespace = "http://tempuri.org/")]
   2:  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   3:  // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
   4:  [System.Web.Script.Services.ScriptService]
   5:  public class Service : System.Web.Services.WebService
   6:  {
   7:      private string[,] estados = new string[27, 4] 
   8:      {
   9:          {"Acre", "AC", "Rio Branco", "152581,4"},
  10:          {"Alagoas", "AL", "Maceió", "27767,7"},
  11:          {"Amapá", "AP", "Macapá", "142814,6"},
  12:          {"Amazonas", "AM", "Manaus", "1570745,7"},
  13:          {"Bahia", "BA", "Salvador", "564692,7"},
  14:          {"Ceará", "CE", "Fortaleza", "148825,6"},
  15:          {"Distrito Federal", "DF", "Brasília", "5822,1"},
  16:          {"Espírito Santo", "ES", "Vitória", "46077,5"},
  17:          {"Goiás", "GO", "Goiânia", "340086,7"},
  18:          {"Maranhão", "MA", "São Luís", "331983,3"},
  19:          {"Mato Grosso", "MT", "Cuiabá", "903357,9"},
  20:          {"Mato Grosso do Sul", "MS", "Campo Grande", "357125,0"},
  21:          {"Minas Gerais", "MG", "Belo Horizonte", "586528,3"},
  22:          {"Pará", "PA", "Belém", "1247689,5"},
  23:          {"Paraíba", "PB", "João Pessoa", "56439,8"},
  24:          {"Paraná", "PR", "Curitiba", "199314,9"},
  25:          {"Pernambuco", "PE", "Recife", "98311,6"},
  26:          {"Piauí", "PI", "Teresina", "251529,2"},
  27:          {"Rio de Janeiro", "RJ", "Rio de Janeiro", "43696,1"},
  28:          {"Rio Grande do Norte", "RN", "Natal", "52796,8"},
  29:          {"Rio Grande do Sul", "RS", "Porto Alegre", "281748,5"},
  30:          {"Rondônia", "RO", "Porto Velho", "237576,2"},
  31:          {"Roraima", "RR", "Boa Vista", "224299,0"},
  32:          {"Santa Catarina", "SC", "Florianópolis", "95346,2"},
  33:          {"São Paulo", "SP", "São Paulo", "248209,4"},
  34:          {"Sergipe", "SE", "Aracaju", "21910,3"},
  35:          {"Tocantins", "TO", "Palmas", "277620,9"}
  36:      };
  37:   
  38:      public Service () {
  39:   
  40:          //Uncomment the following line if using designed components 
  41:          //InitializeComponent(); 
  42:      }
  43:   
  44:      [WebMethod]
  45:      [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
  46:      public string GetEstados() {
  47:          JavaScriptSerializer js = new JavaScriptSerializer();
  48:          
  49:          List<object> obj = new List<object>();
  50:   
  51:          for (int i = 0; i < estados.GetUpperBound(0); i++)
  52:          {
  53:              Estados estado = new Estados();
  54:              estado.Nome = estados[i, 0];
  55:              estado.Abreviacao = estados[i, 1];
  56:              estado.Capital = estados[i, 2];
  57:              estado.Area = estados[i, 3];
  58:   
  59:              obj.Add(estado);
  60:          }
  61:          
  62:          return js.Serialize(obj);
  63:      }
  64:   
  65:      private class Estados
  66:      {
  67:          public string Nome { get; set; }
  68:          public string Abreviacao { get; set; }
  69:          public string Capital { get; set; }
  70:          public string Area { get; set; }
  71:      }
  72:  }

No método GetEstados() foi utilizada a classe JavaScriptSerializer (linha 47) para criar um objeto que serializa no formato JSON, a lista de objetos Estados.
Na execução do webservice obtemos o seguinte retorno:
webservicejson1
Na figura podemos observar que os dados foram retornados em JSON, mas precisamos ter um cuidado no momento de utilizar o retorno deste webservice, porque mesmo o retorno dos dados estando no formato JSON o webservice na verdade retorna um XML com uma tag <string>, onde no valor da string são retornados os dados no formato JSON.

Para que aplicações possam utilizar os dados é necessário fazer a leitura somente da tag <string>. A aplicação que utilizar os dados deste webservice precisa ler o conteúdo da tag <string> para obter a informação em JSON.

Segue uma figura com os dados já formatados como Json.
webservicejson2