miguel5655 1 Denunciar mensagem Publicado 13 de Maio de 2016 Boas pessoal, Precisava da opinião de alguém que perceba como fazer um WebRequest numa aplicação (Windows forms) caso o cliente use Proxy para aceder á Internet. Já li e pesquisei muito sobre este assunto mas vejo tantas formas de fazer que fico confuso, depois umas definições funcionam para uns outras para outro e deixa-me confuso. É assim estou a desenvolver parte de uma aplicação que usa um WebService que temos alojado em IIS na nossa empresa. Até aqui tudo bem. Existem alguns clientes que usam Proxy para aceder á internet, portanto tenho de prever todas as possibilidades de configuração caso o Cliente use proxy e consoante as regras que usam, (se tem autenticação ou não, se pode usar as definições dor defeito do IE, etc....). Portanto a minha ideia é criar um form e o respectivo código em que seja totalmente personalizável, de acordo com os Proxy's de cada um. Vou-vos mostrar o excerto do código que uso para fazer o Request, e depois explico-vos a minha ideia para ver se está correta: Public Function CheckURLResponse(ByVal _url As String) As String Dim request As WebRequest = WebRequest.Create(_url) webRequestProxy(request) Dim result As String = Nothing Dim response As WebResponse Try response = request.GetResponse() response.Close() Catch ex As Exception response = Nothing result = ex.Message End Try If response IsNot Nothing Then result = CType(response, HttpWebResponse).StatusDescription End If Return result End Function Public Sub webRequestProxy(_webRequest As WebRequest) Try Dim username = My.Settings.username Dim password = My.Settings.pass Dim bypass As Boolean = My.Settings.byPassProxy Dim defaultProxy As Boolean = My.Settings.defaultProxy Dim server As String = My.Settings.serverProxy Dim port As String = My.Settings.portProxy Dim required As Boolean = My.Settings.authRequired Dim defProxy As IWebProxy = Nothing Dim myProxy As WebProxy _webRequest.Credentials = CredentialCache.DefaultCredentials If My.Settings.defaultProxy Then defProxy = WebRequest.GetSystemWebProxy() If required Then If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then defProxy.Credentials = New NetworkCredential(username.ToString, password.ToString) End If End If _webRequest.Proxy = defProxy Else If server <> "" And server.Length > 0 And port <> "" And port.Length > 0 Then myProxy = New WebProxy(server, CInt(port)) myProxy.BypassProxyOnLocal = CBool(bypass) If required Then If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then myProxy.Credentials = New NetworkCredential(username.ToString, password.ToString) End If End If _webRequest.Proxy = myProxy End If End If Catch ex As Exception MessageBox.Show(ex.Message, "Error proxy", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub Ora, sempre que quero usar o WebService chamo a função CheckURLResponse e passo como argumento o url do WebService. Por sua vez, esta função chama um método para definir se usa Proxy ou não, conforme a configuração do cliente. Não sei se estou correto mas vou explicar como penso que funciona: Janela configuração Proxy: 1º Tento sempre usar as DefaultCredentials. _webRequest.Credentials = CredentialCache.DefaultCredentials Aqui não sei se devo usar "DefaultCredentials" ou "DefaultNetworkCredentials". 2º Por defeito o "Use default Settings IE/Chrome" está ativo portanto no código ele vai executar: defProxy = WebRequest.GetSystemWebProxy() O GetSystemWebProxy se estou correto vai buscar as definições do IE (host, port, bypasslocal), excepto a autenticação. Caso a autenticação seja necessária. If required Then If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then defProxy.Credentials = New NetworkCredential(username.ToString, password.ToString) End If End If _webRequest.Proxy = defProxy Aqui é passado o Username e password para se autenticar no Proxy e o defProxy é passado ao _webRequest.Proxy. 3º Caso o Servidor e Porta estejam configurados, ou seja o "Use default Settings IE/Chrome" está Unchecked: myProxy = New WebProxy(server, CInt(port)) myProxy.BypassProxyOnLocal = CBool(bypass) Caso exista autenticação: If required Then If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then myProxy.Credentials = New NetworkCredential(username.ToString, password.ToString) End If End If _webRequest.Proxy = myProxy Não sei se desta forma estou a prever corretamente todas as situações possíveis: - Usar definições do IE (servidor, porta, bypasslocal) - Não sei se devo usar ou em que situações: _webRequest.Credentials = CredentialCache.DefaultCredentials OR _webRequest.Credentials = CredentialCache.DefaultNetworkCredentials Sei que existem formas de configurar a app.config para usar o proxy, mas como não me sinto muito á vontade prefiro programar. Agradecia a vossa ajuda e este até pode ser um exemplo para quem queira fazer algo do género. Obrigado Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Crie uma conta ou ligue-se para comentar
Só membros podem comentar
Criar nova conta
Registe para ter uma conta na nossa comunidade. É fácil!
Registar nova contaEntra
Já tem conta? Inicie sessão aqui.
Entrar Agora