segunda-feira, 11 de abril de 2011

IIS not starting: The process cannot access the file because it is being used by another process

Pois é, coisas do PC! você e eu sabemos que a porta 80 é usada pelo IIS pelo menos, desde sua versão 1.0, não é mesmo? Alias desde o nascimento da WEB. Então me responda o seguinte: porque o Skype insiste em utilizar essa porta para prover seus serviços e com isso bloquear o IIS?

Essas são coisas incríveis, e que nos fazem perder um tempão pra descobrir.

E como não vivemos mais sem o IIS e o Skype juntos, melhor é aprendermos a trocar as bolas, ou melhor, as portas. Veja o artigo do Rick Strahl (http://www.west-wind.com/weblog/posts/948039.aspx)

sábado, 2 de abril de 2011

Estou conectado?

Recentemente passei por uma situação interessante, isso porque há muito tempo não programava Win Forms, e por uma determinada questão do projeto, necessitava saber se em determinado instante o sistema estava ou não conectado à Internet. Para a maioria dos desenvolvimentos de soluções Web, esse pequeno detalhe nem é levado em conta, mas em uma aplicação Win que é executado localmente, nesse meu caso, era interessante saber.

GeneXus oferece um tipo bem interessante que é o HttpClient que permite obter o resultado de uma chamada a uma URL qualquer na Web. No exemplo programado temos uma chamada ao google.com, e a resposta pode ser tratada pela leitura do valor de ErrCode. O resultado de ErrCode = 0 significa que não houveram erros.

&HttpClient.Execute("GET", http://www.google.com)
&itsconnected = iif(&HttpClient.ErrCode=0,1,0)

Ao terminar a chamada a variável &itsconnected receberá o valor 1 para o caso de haver conexão, e zero para não.

Esse código bastante enxuto pode ser traduzido em C#, e usando o recurso de programação nativa do GeneXus, poderiamos escrever algo como:


csharp System.Net.HttpWebRequest req;
csharp System.Net.HttpWebResponse resp;
csharp try {
csharp string url = @"http:"+"/"+"/"+"www.google.com/";
csharp req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
csharp resp = (System.Net.HttpWebResponse)req.GetResponse();
csharp if(resp.StatusCode.ToString().Equals("OK")) {
csharp [!&itsconnected!] = 1;
csharp }
csharp else {
csharp [!&itsconnected!] = 0;
csharp }
csharp } catch(Exception exc) {
csharp [!&itsconnected!] = 0;
csharp }

Observe a grafia para se fornecer o endereço http://www.google.com, no código nativo, isso devido ao problema de newline in constant gerado pelo compilador C#.

Veja que GeneXus suporta os dois modelos de programação, mas se compararmos, fica nítido o quanto GeneXus de fato nos facilita a vida, não é?