Olá Internautas, hoje gostaria de falar sobre um código importante para quem usa URL dinâmica no WebService. Para quem trabalha com vários ambientes de software, essa solução pode valer muito a pena.

Requisitos:
Ferramenta de desenvolvimento: Visual Studio.NET (qualquer versão)
Linguagem: C#.NET
Framework 3.5 pra cima

    Para quem tem os ambientes devidamente separados, é necessário utilizar alguns dados dinâmicos para evitar re-trabalho no momento da compilação. Isto é, alterar só no arquivo de configuração de acordo com o ambiente de desenvolvimento, homologação e produção.
   
Imagina que exista um webservice dentro da ferramenta referenciada, naquela pasta Web References. A URL desse webservice aponta diretamente para o ambiente de desenvolvimento, porém, é necessário publicar a aplicação no ambiente de homologação.
   
    Lógico que o webservice já está no ambiente de homologação e a idéia não é referenciar uma nova url dentro da ferramenta. (Figura 1)


alt
Figura 1
   
    Eu preciso que esse apontamento de url seja dinâmico e de acordo com o ambiente que o aplicativo for publicado, isto é, para homologação pegar a url de “hom”, para “produção” e assim por diante.

    Se não for colocado dinamicamente, para cada ambiente é necessário alterar a url na ferramenta, compilar novamente e publicar no ambiente. Veja a url (Figura 2) Esse ambiente é de desenvolvimento.


alt
Figura 2

    No terceiro campo (Web Reference URL) é o que preciso mudar.
    A primeira coisa é declarar a variável no início do código. (Tabela 1)

--------------------------------------------------------------------
private WSRetaguarda.Retaguarda wsRetaguarda; //variavel do webservice
--------------------------------------------------------------------
Tabela 1

    O próximo passo é gerar um método para verificar a variável e atribuir o valor. (Code 1)

---------------------------------------------------------------------
private void InicialzarWebService()
{
    if (wsRetaguarda == null)
    {
       wsRetaguarda = new WSRetaguarda.Retaguarda();
       wsRetaguarda.Url = pathWebService;
    }
     else
       wsRetaguarda.Url = pathWebService;
    }
---------------------------------------------------------------------
Code 1

    Esse code 1 verifica primeiramente se a variável é null, se for ele gera uma nova instância e atribui a variável URL passando o path do webservice dinâmico. Esse path dinâmico pode estar dentro do arquivo web.config.
    Para quem usa a ferramenta Visual Studio .NET 2010, fica bem simples porque o arquivo de configuração é dinâmico para cada ambiente. Veja o vídeo abaixo e se informe mais.

Vídeo:
link do vídeo

    Depois de criar o método e colocar a variável pegando do web.config, basta chamar sempre este método (inicializarWebService()) antes de chamar qualquer outro método do webservice. Veja o exemplo, Code 2.

-----------------------------------------------------------------------
private void carregarDados()
        {
            try
            {
                InicialzarWebService();

                DataTable dtResultado = wsRetaguarda.buscaModeloHardware();
                cmbScanner.DataSource = dtResultado;
                cmbScanner.ValueMember = "mhaId";
                cmbScanner.DisplayMember = "mhaNome";

                if (dtResultado.Rows.Count > 0)
                {
                    foreach (DataRow dtRow in dtResultado.Rows)
                    {
this._listaMhaUrlInstalacao.Add(Convert.ToInt32(dtRow["mhaId"]), Convert.ToString(dtRow["mhaUrlInstalacao"]));
                    } 
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
-----------------------------------------------------------------------
Code 2

    É bem simples e fácil, pois agora não precisarei compilar os dados para atribuir a URL de acordo com o ambiente. Caso você use um new chamando o webservice, essa url se perde e volta a apontar para desenvolvimento. Isso porque é a primeira da ferramenta do Visual Studio.NET.

    Bom, ficou por aqui qualquer coisa pode entrar em contato pelo site.