Url dinâmica em Web Services


Quando fazemos a Web Reference no projeto, uma classe proxy herdando de SoapHttpClientProtocol é criada. Esta classe nos fornece uma propriedade chamada URL, que armazena a URL do Web Service que o cliente está invocando. No momento desta referência, o proxy gerado define a URL baseando-se na URL de desenvolvimento (qual informamos), que provavelmente trata-se de um endereço de localhost.

É através desta propriedade que alteramos em tempo de execução no cliente a URL do serviço, desde que, esta nova URL (Web Service) implemente a mesma descrição/serviço que foi anteriormente gerado pela classe proxy. Para ilustrar isso, criamos um Web Service com um WebMethod e o referenciamos na aplicação cliente. Iremos definir a URL do Web Service no arquivo de configuração da aplicação (App.Config) para que, quando a URL mudar, não precisar recompilar a aplicação:

using System.Configuration;

WS.Consultas ws = new WS.Consultas();
ws.Url = ConfigurationSettings.AppSettings["WSURL"];
MessageBox.Show(ws.MensagemBoasVindas(Me.txtNome.Text));

Como vemos no código acima, depois que instanciamos o Web Service, recuperamos a URL do arquivo de configuração através da propriedade AppSettings e definimos na propriedade URL. Em seguida apenas chamamos o WebMethod da forma como já conhecemos. O código abaixo mostra a chave e seu valor (URL) definida no arquivo de configuração:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="WSURL" value="http://localhost/WSNovo/Consultas.asmx" />
    </appSettings>
</configuration>

Mas há ainda a possibilidade de colocarmos isso no construtor da classe Proxy para não ficarmos definindo esse parâmetro a cada instância do WebService. No Web Service temos uma propriedade chamada URLBehavior que, ao definí-la como Dynamic, automaticamente é criado uma chave dentro do arquivo App.Config contendo a URL do Web Service e, o código do construtor da classe proxy que herda de SoapHttpClientProtocol é alterado para buscar a URL Web Service dentro do arquivo de configuração da aplicação. A imagem abaixo mostra a janela de propriedades do Web Service, onde devemos definir a URL Web Service como dinâmica:

Figura 1 – Janela de propriedades do Web Service.

Depois desta alteração, o construtor da classe proxy fica:

public Consultas() {
    string urlSetting = System.Configuration.ConfigurationSettings.AppSettings["WSURL"];
    if ((urlSetting != null)) {
        this.Url = string.Concat(urlSetting, "");
    }
    else {
        this.Url = "http://localhost/WS/Service1.asmx";
    }
}
Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s