Postagens

COM+ e problemas de memória

Onde trabalho possuímos uma infra que serve de façade para a chamada de componentes dos sistemas de forma remota. Esta forma remota pode ser desde estações de usuário para servidores de componentes, servidores web para servidores de componentes e mesmo entre servidores de componentes. Ela é um pacote COM+, e chama componentes que estão também hospedados no COM+ (temos muito legado aqui, vai demorar para sair dessa tecnologia). Recentemente deparamos com um problema de alto consumo de memória do nosso processo dllhost. Pedimos um dump deste processo (windbg), e ao analisar, encontrei muitas entradas de System.OutOfMemoryException. Ao verificar a causa dessas exceptions, encontrei a seguinte mensagem: Retrieving the COM class factory for component with CLSID {6DEDD69A-065F-4781-90A7-35E0E0DEB4BA} failed due to the following error: 8007000e. O componente que está se querendo instanciar é um DTO nosso, e não está sendo possível pelo erro de falta de memória. Encontrei um KB que fala sobre ...

Cakewalk Sonar 7 sem som

Imagem
Fiquei muito feliz nesses últimos dias ao instalar uma nova versão do Cakewalk (agora chamado Sonar) e abrir alguns projetos de músicas da época qu eeu era um aspirante a músico. Um ar nostalgico pairou ao meu redor... No entanto, não consegui ouvir as músicas de primeira. Não tenho equipamento profissional, e para usar esse tipo de programa me valho de MIDI, só que não estava configurado para utilizá-lo, e ao executar a música nada se ouvia. Bom, tive que seguir os passos abaixo, que foram tirados do seguinte post: http://74.125.95.132/search?q=cache:Ps7c-BK3QyQJ:forum.cakewalk.com/fb.asp%3Fgo%3Dnext%26m%3D1304455%26viewType%3Dtm+sonar+7+no+sound&hl=en&ct=clnk&cd=1 Primeiro, fui até o menu Options --> Audio... Na tab Advanced, alterei o Driver Mode para MME (32-bit). Depois disso reiniciei o aplicativo. Quando a nova instância foi aberta, me foi alertado que não havia nenhum output selecionado. Foi então que pude escolher o wavetable da Microsoft para simular os sons do...

Como excluir pacotes COM+ que não possuem a opção Delete no menu de contexto

Imagem
Olá! Estou trabalhando em um projeto de uma aplicação que faz instalações de componentes em servidores de forma automatizada. Uma das funcionalidades é criar diretórios virtuais no IIS. Acontece que durante alguns testes dessa funcionalidade, notei que cada vez que os diretórios virtuais eram criados, também era criado um pacote COM+ de nome IIS-{ //ROOT/ }. O engraçado é que mesmo excluindo os diretórios virtuais, esses pacotes permaneciam, e não podiam ser excluídos (não havia a opção Delete no menu de contexto). O problema foi corrigido na aplicação de instalação (não cheguei a ver a causa e correção, mas prometo fazê-lo), no entanto restava a necessidade de remover esses pacotes COM+, já que eram inúteis. Procurei no Google e encontrei uma solução para permitir que os pacotes fossem "excluíveis": usando o COMAdmin, alterar uma propriedade do pacote que libera esta opção. O código utilizado é o abaixo: ICOMAdminCatalog catalogo; ICatalogCollection pacotesCOMPlus; ICatalog...

Operador yield no C#

Imagem
Hoje encontrei um operador no C# que desconhecia, o yield . Ele serve para manter estado quando se percorre uma coleção de objetos, e está intimente ligado à implementação do pattern Iterator dentro do C#. Na prática, ele pode ser aplicado quando temos métodos que retornam um IEnumerable . No exemplo abaixo, eu tenho um método que percorre as datas de finais de semana (Sábado e Domingo) dado um ano. Veja que este método é chamado dentro de um foreach , e cada iteração ele exibe uma data na tela. Não estou preocupado, dentro do foreach , em saber qual foi a última data que foi exibida, isso é controlado internamente durante a iteração, que vai mantendo o loop "ativo" através do operador yield . Feliz Natal e até a próxima! using System; using System.Collections.Generic; namespace TesteYield { class Program { static void Main(string[] args) { Console.WriteLine("Finais de semana de 2009:"); foreach (DateTime data in...

Barbarismo

Estou escrevendo um texto sobre classes customizadas para a leitura de configurações no .NET..., mas senti que a palavra "customizadas", apesar de muito utilizada nas empresas e em especial na área de informática, não soa legal... Customizar vem da palavra "customize" e que vem de "customer", "cliente" em inglês, ou seja, construir, alterar ou reformar conforme especificações individuais. Pode ser um estrangeirismo, o ato de adotar uma palavra de outra língua se não tivermos uma correspondente. Se tiver uma correspondente, é chamado de barbarismo. Então, para não correr o risco de um barbarismo, resolvi colocar a palavra "personalizar". Melhor, não? Senão vou começar a usar termos como "deployar" em vez de "implantar", "buildar" em vez de "compilar", etc..., aí não dá certo, rs. []'s

Erro de 404 com ASP.NET em Windows 2003 Server (IIS6)

Imagem
Você criou um novo diretório virtual em um novo servidor Windows 2003 (IIS6), colocou uma aplicação ASP.NET nele, e quando foi acessá-lo, eis que aparece o erro 404! E o engraçado, quando você acessa páginas HTML, elas abrem sem problemas! Estranho? Não, diria que a mensagem é que não é clara. Provavelmente o ASP.NET não está habilitado nas Web Service Extensions. É só colocá-los como Allowed que seu site irá funcionar. []'s

Tirinha...

Imagem