jueves, enero 28, 2010

Consumiendo desde .Net un Web Service publicado en Java (HttpWebRequest da time out)

Tomado de:

http://snoopdotnet.wordpress.com/2010/01/28/consumiendo-desde-net-un-web-service-publicado-en-java-httpwebrequest-da-time-out/

Consumiendo desde .Net un Web Service publicado en Java (HttpWebRequest da time out) January 28, 2010
Posted by Leandro Romero in .NET, Arquitectura, Diseño, Tips, coding.
Tags: GetRequestStream Time Out, java, troubleshooting, web service
trackback

Buenas gente! Tanto tiempo!

Desde hace un tiempo estoy trabajando en un aplicación que consume unos web services hechos en Java, la cual por momentos tiene bastante concurrencia y operaciones que demandan mucho trabajo para las dos “puntas” que están en juego.

Tengo que aclarar que esta aplicación no la desarrollé yo, la “heredé” digamos. Así que lo que estaba en producción andaba sin problemas. Los usuarios se conectaban, hacían sus operaciones sin mayores problemas, y como no necesitaba mayores mantenimientos esa parte yo no la había tenido demasiado en cuenta.

Hasta que llegó el día que el servicio que exponía el amigo (nótese: AMIGO) java tuvo que sufrir algunos cambios, con lo cual tuve que actualizar referencias del Wsdl en mi solución .Net. Hasta acá nada del otro mundo, agarro el proyecto donde está la referencia Web (sí, está hecho a la antigua porque la aplicación es del 2006) pego la nueva dirección del wsdl y actualizo referencias. Esto hace que la clase que hace de proxy se regenere (básicamente borra lo que estaba y vuelve a armar los archivos necesarios, entre ellos el Reference.cs). Compilo, genero el exe nuevo y le digo al analista: “Deployalo en preproducción para acelerar la salida a producción, total no toqué nada, debería andar como hasta ahora”

Y no, por algo existe Murphy. A los dos días el cliente que estaba haciendo las pruebas en prepro me dice: “Lean, esto que compilaste no anda”. “Cómo que no anda si no toqué nada??!?!” (La excusa del programador nº 1) “No anda, tira un error de conección cuando se conectan 3 usuarios y ejecutan una tarea los 3, fijate el log!”

Y como buen desarrollador profesional que soy, fuí a ver el log y decía:

The operation has timed out System.Net.WebException System.IO.Stream GetRequestStream() at System.Net.HttpWebRequest.GetRequestStream() at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

“Elemental mi querido Watson” dije al ver el time out, “el server java no está respondiendo”, pero no, la excepción es bastante clara, está fallando al obtener el Request Stream; o sea, no mandó nada todavía, se está preparando para hacer la llamada y falla. Raro, no?

Investigando esa excepción (googleando) en los foros todos eran bastante claros “Flaco, a los stream que abras cerralos, eso te pasa por no cerrarlos: Stream.Close() papá!” (son foros argentinos, por eso) Pero no, yo no me encargo de streams ni nada de eso a mano, porque para eso está el código generado automáticamente por el Visual Studio y este código es el mejor, no tiene errores, es perfecto porque lo hace automático el Visual Studio no?

NO, claramente es la Lección aprendida 1. Según este blog (el único que vi que dió con este problema) que me pasó mi buen amigo Charly es un bug del proxy que se genera automáticamente, para solucionar esto hay que deshabilitar el parámetro KeepAlive del request, más específicamente hacer un override de un método de esa clase y deshabilitarlo y más técnicamente hablando:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
webRequest.KeepAlive = false;
webRequest.ConnectionGroupName = Guid.NewGuid().ToString();
return webRequest;
}

Puse esto en la clase proxy (la que está en el archivo Reference.cs) y voilà! problema arreglado :)

Ahora, haciendo un poco de reflexión, por qué antes andaba y cuando yo regeneré el cliente tuve que hacer esto??? Para despejar esta duda que no me dejaba dormir, utilicé una herramienta amiga llamada Reflector para ver el código de la dll que se compiló en su momento, ya que dudaba de los fuentes que había heredado y sí, efectivamente estaba esa porción de código de alguien (sólo Dios sabe quien) que se topó con el mismo problema.

Leccion aprendida 2 (y consejo sano, además). Siempre documentar las soluciones “mágicas” que se incluyan en el código, porque uno nunca sabe quién va a ser el pobre santo (o gil) que lo herede y más si se escriben en archivos que se generan automáticamente.

Y ahora sí, el cliente lo probó en test, lo deployamos en preproducción donde fue sometido a estrés sin ningún problema y finalmente salió a producción. Siempre son lindos los finales felices!

Gracias Leandro.

martes, enero 12, 2010

Instalar el GxPLorer6 y GxQuery en w2003

Debido a la serie de problemas surgido por la instalación del GXQuery30 y GxPlorer60 en un servidor Windows 2003, veo la necesidad de documentar esta experiencia justamente para ayudar a quienes se enfrenten con el mismo problema.

1.- Instalar el FrameWork 2
2.- Instalar el IIS.
3.- En una ventana de Dos, ubiquese en C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ luego ejecute aspnet_regiis.exe -i
4.- Instalar el GxQuery30
5.- Instalar el GxPlorer60
6.- Hacemos Inicio,
MI PC
Boton Derecho
Administrar
Servicios y Aplicaciones ( Expandir)
Administrador de Internet Informatio Services(IIS) (Expandir)
Sitios Web
Sitio Web Predeterminado (Expandir)
Extensiones de Servicio Web.



Deben estar habilitados los permisos justamente como consta la gráfica

7.- Si hemos modificado el puerto de acceso del IIS, tenemos que editar los archivos config.ini del Query y GxPlorer, estos esta ubicados generalmente en las carpetas de instalación por omisión, en este caso:
C:\Archivos de programa\ARTech\GXquery\GXquery 3.0\Program\ para el caso de Query
C:\Archivos de programa\ARTech\GXplorer\GXplorer 6.0\Program\ para el caso de GxPlorer

8.- Editamos el archivo config.ini y modificamos la IP y Puerto asignado a IIS para que contemple su utilizacion el Query y GxPlorer, de la siguiente manera:

Para el caso de GxPlorer
C:\Archivos de programa\ARTech\GXplorer\GXplorer 6.0\Program\

[General]
UseKBWrapperCache =Y
UrlWebComponentProvider=http://192.168.202.25/ControlsAndReports60
[MetadataCatalog]
Path=C:\GxplCat

Para el caso de GxQuery
C:\Archivos de programa\ARTech\GXquery\GXquery 3.0\Program\

[General]
UseKBWrapperCache =Y
UrlWebComponentProvider=http://192.168.202.25/ControlsAndReports30
[MetadataCatalog]
Path=C:\GxplCat

9.- Hecho esto procedemos con la autorización de usuarios en los componentes DCOM, para ello procedemos de la siguiente manera:
Inicio
Herramientas administrativas
Servicios de Componentes.


Ahi nos deplega en el panel derecho Equipos
Doble Click y nos desplega Mi PC
Doble Click y nos desplega la siguiente Pantalla


Doble Click en el lugar que recomienda la imagen, para que nos desplegue la siguiente imagen.


Click Boton Derecho en KbWrapper.Wrapper, seleccione propiedades y luego click en la pestaña Seguridades, segun imagen adjunta.



Luego nos desplegara la siguiente imagen:


En Permisos de Inicio y Activación
Click en Personalizar.
Click en Modificar nos desplegara la siguiente pantalla.

Es importantisimo que se incluya todos los usuarios que constan en esta lista, ademas tengan autorizaciones totales, justo como lo demuestra la imagen.
Para seleccionar Cuenta de Invitado a Internet, realice los siguientes pasos.
Click en Agregar
Nos desplegara la siguiente imagen.

Click en el boton Avanzadas
Nos desplegara la siguiente imagen.

Click en Buscar Ahora.
Nos desplegara la siguiente imagen.


Buscar el Usuario IUSR_(Nombre de la PC) en este caso la PC tiene por nombre PRUEBAS-WEB, como consta la imagen señalada en un circulo ROJO.
Luego damos click en el Boton Aceptar.
Nos Desplegara la siguiente imagen.


Click en el boton Aceptar.
Nos desplegara los siguiente imagen.

Para que se ajuste a la imagen debemos dar permisos de:
Ejecución Local.
Ejecución Remota.
Activación Local.
Activación Remota.

A todos los usuarios que constan en la lista.

Luego seleccionamos PERMISOS DE ACCESO
Nos desplegará la siguiente pantalla, adicionar los usuarios que no consten en la lista sobre todo el Usuario ANONYMOUS LOGON con los permisos sugeridos segun la imagen.


Luego seleccionamos de Configuración
Nos desplegará la siguiente pantalla.

Nos desplegará la siguiente pantalla, adicionar los usuarios que no consten en la lista sobre todo el Usuario ANONYMOUS LOGON con los permisos sugeridos segun la imagen.

Es importante que con GXPlorer Settings se asigne o se cree un usuario administrador con todos los derechos sobre la Metadata, para luego asignar los respectivos permisos a los demas usuarios.

Seguidamente en una pantalla de DOS, ejecutamos el comando iisreset, para que el IIS se reinicie.
Y Procedemos hacer las pruebas respectivas de funcionamiento con las datos de pruebas.

Ejecutar GxPlorer Settings, modificar las preferencias, Idioma y crear un usuario como supervisor.

miércoles, enero 06, 2010

Creacion de Cuenta Gratis para AS400 (Gratis y en Español)

Tomado de:
http://www.taringa.net/posts/ebooks-tutoriales/2789733/Cuenta-as400-gratis-+-emuladores-ISeries-IBM--%28recomendado%29.html

Joomla o Drupal

Tomado de:
http://www.taringa.net/posts/info/3523933/Drupal-vs_-Joomla.html

Drupal vs. Joomla: una comparativa sincera de un consultor de IBM

Esto es una traducción de un artículo (más o menos literal pero no siempre) de TopNotchThemes



Fuimos muy afortunados recientemente porque un consultor de IBM compró uno de nuestros temas de Drupal para un proyecto personal. Antes de comprar el tema, discutimos un poco acerca de Drupal y Joomla, centrándonos en las diferencias entre las funcionalidades y el diseño.

Digo afortunadamente porque el consultor evaluó los dos CMS's. Recibí un email con una comparativa fascinante y detallada de sus primeras experiencias con Drupal y con Joomla. Me permitieron poner esta entrada (de forma anónima) aquí en nuestro blog para que la comunidad pudiese beneficiarse de esta gran escrito.

Sólo diré que a) estoy de acuerdo con todo lo dicho aquí, y b) las buenas noticias son que casi todo en lo que flojea Drupal será corregido (o por lo menos es la intención) en Drupal 7. Veo a la comunidad de Drupal poniendo mucho esfuerzo de muchas maneras trabajando en la preconfiguración/"population" de un sitio (Installation profiles, Patterns, Spaces, Drush, etc).

Escrito del consultor de IBM:
Aquí están mis observaciones de Drupal después de 40-50 horas con la herramienta (tengo experiencia con Joomla, DotNetNuke, por supuesto con la solución de IBM: Websphere Portal, WCM y Portlet Factory. Planeo evaluar alguno otro en unos días antes de decidirme. Los costes de hosting y de desarrollo de Websphere Portal son demasiado altos o ya estaría usando la solución de IBM.

Drupal vs. Joomla

Construcción del Sitio:

Flexibilidad y Potencia: Drupal es significativamente más potente y mucho más flexible. Parece que Views, CCK, Panels, etc le dan a Drupal una enorme ventaja sobre Joomla. Simplemente no puedes tener esa flexibilidad con Joomla. Los desarrolladores de Joomla cuando lo diseñaron no tuvieron en cuenta la flexibilidad. Puedes construir algo muy rápido con Joomla pero toparán con un muro antes o temprano.

Rendimiento:

En mis tests iniciales Drupal superó ampliamente a Joomla. Con la nueva versión de Joomla, the good template makers junk them up with gee-whiz gadgets that are not suitable for the enterprise (esto no sé cómo traducirlo exactamente)

Curva de aprendizaje:

Joomla es de largo más fácil de configurar y poner en marcha. Incluso con los todos vídeos gratis, blogs, etc, Drupal todavía es un desafío. Veo grandes oportunidades para un negocio aquí.

Plantillas:

Joomla gana por un amplio margen. Por ejemplo, empresas como Joomlart, Joomlashack hacer un buen trabajo. Las empresas de temas para Drupal son muy malas. Lo que se necesita es una estrategia de plantillas que simule los requisitos para las webs más importantes del país y incluya módulos, bloques, etc que funcionen directamente para facilitar a las empresas un punto de partida. Por ejemplo, con nuestro producto Websphere Portal ofrecemos increíbles temas y skins que son muy sólidos y profesionales y sin ningún problema. Creo que vosotros (se refiero a los de Top Notch Themes) tenéis una buena estrategia de entrada pero estás perdiendo una gran oportunidad de ofrecer lo que las empresas realmente quieren.

Vuestras plantillas son las mejores que he visto, pero una empresa que está empezando con Drupal todavía tiene una enorme rampa que subir para conseguir que un web de noticias, una revista, etc se vea bonita. Joomlart ofrece su plantilla Tenilne II con una instalación especial que te da todos los datos de ejemplo y todos los componentes en su sitio. Todo está en su sitio.

Finalmente, el mayor problema con las plantillas en Drupal es que los desarrolladores olvidaron completamente una de las claves que cualquier evaluador mira: el sistema de menú. Si no tienes un sistema profesional de menú en tu web parecerá que tienes una web de baja calidad. Las otras cosas importantes son: Layout, gráficos, velocidad son cosas críticas y a los desarrolladores (supongo que de temas) de Drupal parece que no les importa.

Programadores:

Basado en mi limitada experiencia parece que los programadores de Drupal son mucho más profesionales, habilidosos y disciplinados. Los buenos programadores de Joomla son escasos. Debe ser algo relacionado con la cultura de Drupal. Estoy seguro que los desarrolladores de Joomla están muy capacitados pero simplemente no tienen el mismo rigor.

Admin:

El panel de control de la administración de Drupal es malo. La separación entre el "front-end" y el "backend" es débil y confusa. Joomla es mucho mejor.

Editor de contenido:

El sistema de taxonomías de Drupal es excelente. La aproximación de Joomla es pobre (los tipos de contenido están confinados a una sección/categoría). La consola de administración de Joomla es mucho más fácil para organizar y encontrar contenido. El WYSIWYG de Joomla es mucho mejor que las opciones que existen en Drupal.

Construcción de contenido:

Las herrameintas de Drupal son, muy, muy buenas, aunque no tanto cómo las herramientas de IBM, pero son increiblemente mejores que las de Joomla. Me gusta CCK, Views y me pregunto porque no forman parte del core. Parece raro. Con Joomla puedes conseguir componente que ofrezcan el 60-80% de lo que necesitas. Por ejemplo, iJoomla tiene un tremendo componente de noticias, pero nunca llegará a las capacidades de CCK, Views, etc.

Implementación multicapa:

Estoy sorprendido de que no haya buenos tutoriales y artículos sobre la correcta manera de implementar entornos de desarrollo, de test y etapas. Las comunidades de Drupal y Joomla sufren en este sentido. También, un backup y restore no están direccionadas adecuadamente. La comunidad de Drupal está despistada en esta asunto. Joomla tiene al menos dos buenas soluciones. Si decidiese recomendar Drupal para un sitio en producción, recomendaría usar Xcloner de Joomlaplug, este producto funcionaría con Drupal y hacer backups y restores de un sitio web y de la base de datos.

Resumen:

Usa Joomla si quieres tener un sitio bonito de forma rápida y puedes afrontar tener un sistema más lento, una categorización de contenido rígida y unas opciones de configuración y de diseño limitadas.
Usa Drupal si quieres alto rendimiento, escalabilidad, buen gestor de contenido y una flexibilidad de diseño significativa. Pero prepárate para gastar un montón de dinero/tiempo en conseguir un sitio profesional.

En Eternal Fight creé hace un tiempo un lucha entre Drupal vs Joomla.

martes, enero 05, 2010

DBRET no considera las PK de tablas del iSeries

Descripción : DBRET no considera las PK de tablas del iSeries

Se tiene una base de datos creada en el iSeries que se accede con el DBRET. En el reporte final se puede ver que el DBRET no creará ninguna TRN para las tablas, aparecen solo los Data View, todos ellos con el siguiente warning: "The table doesn't have primary key"

Descripción Detallada
Esto suele suceder cuando la tablas del iSeries fueron creadas como DDS compiladas (como lo hace el generador RPG/COBOL de Genexus) y se selecciona como DBMS en la conexión del DBRET el "DB2 for iSeries".

Para las tablas que fueron creadas de esa forma, se debe seleccionar como DBMS la opción "iSeries Native". La opcion "Db2 for iSeries" es para tablas credas como SQL Collection.

Una de las diferencias entre DDS y SQL Collection es jutamente la forma de definir los índices o lógicos en el iSeries, por lo tanto es importante seleccionar el DBMS correspondiente en cada caso.

Ajuste de la memoria usada por SQL Server 2005

Tema

Microsoft SQL Server 2005 or Express is using all of the available memory on your VPS. Microsoft SQL Server 2005 o Express utiliza toda la memoria disponible en su VPS. SQL Server memory usage may continue to steadily increase and not decrease, even when activity on the server is low. El uso de memoria de SQL Server puede seguir de manera constante aumento y no disminuye, incluso cuando la actividad en el servidor es baja.
Reason Exposición de motivos

By default, SQL Server dynamically grows and shrinks the size of its buffer pool (cache) depending on the physical memory load reported by the operating system. De forma predeterminada, SQL Server de forma dinámica crece y disminuye el tamaño de su pool de buffer (cache) en función de la carga de la memoria física reportado por el sistema operativo. When MSSQL is installed, the maximum server memory value is set by default to approximately 2,000 GB. Cuando se instala MSSQL, el máximo valor de la memoria del servidor está configurado por defecto a unos 2.000 GB. If your VPS is only running MSSQL, this value is fine. Si el VPS es sólo correr MSSQL, este valor está muy bien. If you are running additional applications such as IIS, SMTP and other services on your server, you will want to adjust this value so that MSSQL shares memory with other applications on the server. Si está ejecutando aplicaciones adicionales, tales como IIS, SMTP y otros servicios en su servidor, tendrá que ajustar este valor, de modo que las cuotas de MSSQL de memoria con otras aplicaciones en el servidor.
How to adjust the memory used by SQL Server 2005 ¿Cómo ajustar la memoria usada por SQL Server 2005

The steps below apply to both SQL Server 2005 and SQL Express. Los pasos siguientes se aplican a SQL Server 2005 y SQL Express.

1. Log into Microsoft SQL Server Management Studio Express or Workgroup either directly on your VPS or from your local machine Inicie sesión en Microsoft SQL Server Management Studio Express o grupo de trabajo, ya sea directamente en su VPS o de su máquina local
2. Right click the SQL server name and select Properties Haga clic en el nombre del servidor SQL y seleccione Propiedades en




3.- Seleccione la ficha Memoria




4.- Ajustar la memoria del servidor mínima y máxima de memoria del servidor, tambien es importante revisar la cantidad que posee el servidor y en este caso intentar reducir para que no llegue a consumir lo maximo que pueda.
5.- Click OK Haga clic en Aceptar

Modificar formato de Fecha y Punto Decimal en GX 9

0.- En Diseño Modificar el Lenguaje del Modelo a Spanish.
1.- Editar un objeto tipo Language llamado Spanish.
2.- Luego vamos a Propiedades y Modificamos la que deseamos
Date Format.
Decimal Separator.
3.- Aceptamos
4.- Volvemos a generar los objetos
5.- Ejecutamos la aplicacion

lunes, enero 04, 2010

Revisar Puertos

Como revisar los puertos TCP/IP abiertos por aplicaciones o servicios
September 14th, 2007
Goto comments Leave a comment

Esta es una pregunta que constantemente me hacen y es en verdad muy sencillo. Es una situación típica que al instalar una nueva aplicación, esta no suba porque un puerto que necesita abrir esta siendo usada por otra aplicación pero como hago para saber cual puerto y cual aplicación para cambiarlos.

La primero que se le ocurre a muchos es mirar el Task Manager, pero este solo muestra los procesos activos pero no da ninguna indicación de los puertos abiertos por dichos procesos. Una forma muy sencilla y sin requerir software adicional es usar el comando netstat y combinarlo con la información que muestra el Task Manager. Primero veamos el comando netstat, para mostrar las ayudas en una ventana de comando ejecutamos netstat /? y esto es lo que conseguimos:

Displays protocol statistics and current TCP/IP network connections.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

-a Displays all connections and listening ports.
-b Displays the executable involved in creating each connection or
listening port. In some cases well-known executables host
multiple independent components, and in these cases the
sequence of components involved in creating the connection
or listening port is displayed. In this case the executable
name is in [] at the bottom, on top is the component it called,
and so forth until TCP/IP was reached. Note that this option
can be time-consuming and will fail unless you have sufficient
permissions.
-e Displays Ethernet statistics. This may be combined with the -s
option.
-f Displays Fully Qualified Domain Names (FQDN) for foreign
addresses.
-n Displays addresses and port numbers in numerical form.
-o Displays the owning process ID associated with each connection.
-p proto Shows connections for the protocol specified by proto; proto
may be any of: TCP, UDP, TCPv6, or UDPv6. If used with the -s
option to display per-protocol statistics, proto may be any of:
IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, or UDPv6.
-r Displays the routing table.
-s Displays per-protocol statistics. By default, statistics are
shown for IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, and UDPv6;
the -p option may be used to specify a subset of the default.
-t Displays the current connection offload state.
interval Redisplays selected statistics, pausing interval seconds
between each display. Press CTRL+C to stop redisplaying
statistics. If omitted, netstat will print the current
configuration information once.

Algo curioso es que en las ayudas de microsoft la opción -b no se presenta, creo que fue agregada en un service pack. Antes de la opción -b lo que yo hacia era ejecutar el comando netstat con las opciones -noa así:

netstat -noa

Con estas tres banderas los datos que nos aparecen son estos:


Tomado de:
http://blog.cardila.com/2007/09/14/como-revisar-los-puertos-tcpip-abiertos-por-aplicaciones-o-servicios/

Protocolo (TCP o UDP), Dirección IP local, Dirección IP Remota, estado y PID (Process ID). Este último nos indica cual es el identificado del proceso que esta abriendo el puerto. Pero con el identificador del proceso todavia no sabemos el nombre del proceso y es aqui donde entra el Task Manager. Si abrimos el Task Manager (Control + Alt + Del), vemos la lista de los procesos y tambien podemos ver el PID. Por defecto esta columna (PID) no aparece en la lista así que debemos agregarla, para ello hacermos clic en el tab Processes y entramos a View | Select Columns en el menú. Seleccionamos la columna PID (Process Identifier) y hacemos clic en OK.





Ahora podemos asociar el PID de nuestro comando netstat con el PID de la ventana Task Manager y ya tenemos el nombre del proceso.

Podemos tambien usar la opción -b y no necesitamos al Task Manager pero requerimos ejecutar la ventana de comandos con usuario administrador, si es que estamos usando Windows Vista como nuestro sistema operativo, el comando netstat con la opción -b requiere elevación. Nuestro comando sería:

netstat -bnoa



Este comando nos muestra además de la información que ya habiamos mencionado, el nombre del proceso, bastante mas rápido y directo que con el Task Manager pero requiere elevación en Vista.