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"; } } |