viernes, 24 de febrero de 2012

No se puede generar una clase temporal (result=1).error CS0029: No se puede convertir implícitamente el tipo 'servicioType' a 'servicioType[]'

Agregué una referencia a un webservice en una solución web de .net, cuando hice el debug obtuve el siguiente error al intentar crear una instancia del webservice:


No se puede generar una clase temporal (result=1).error CS0029: No se puede convertir implícitamente el tipo 'servicioType' a 'servicioType[]' 

Comencé a investigar y el problema y su solución son muy entretenidos.

Parece ser que el webservice fue generado con una herramienta para exponer procedimientos almacenados creados en Oracle. El webservice tiene  la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>
...
</WL5G3N0:types>

Se nota que es un error de conversión, me enteré que el error sucede solo al tratar de consumir el webservice con .NET, con Java no sucede, leyendo aquí  encontré un enlace a la pagina de soporte de Microsoft que explica como solucionar parcialmente el problema:

"Este problema se produce cuando el Asistente para publicación de servicios Web de BizTalk utiliza la herramienta de lenguaje de descripción de servicios Web (WSDL.exe) para generar la información de cliente. Cuando publica un esquema que contiene nodos anidados que tienen el atributo  maxOccurs  establecido en el valor "unbounded", la herramienta WSDL.exe crea matrices multidimensionales en el archivo datatypes.cs generado. Por lo tanto, el archivo datatypes.cs generado contiene tipos incorrectos para los nodos anidados."

pagina de soporte de Microsoft: http://support.microsoft.com/kb/891386

Ahora que sabemos que el error se produce en el programa WSDL.EXE al generar la clase que representa al webservice.  

Podemos solucionar el problema en pocos pasos:

1.- Generar una clase proxy  con la aplicación wsdl.exe que trae Visual Studio.
2.- Reparar a mano la clase generada.
3.- Crear una dll a partir de la clase reparada.
4.- Agregar la dll como referencia en nuestro proyecto.

Detalle de los pasos:

1.-Para ejecutar wsdl.exe debemos abrir una ventana de comando de Visual Studio, se puede levantar desde el menú inicio:

Inicio/Todos los programas/ Microsoft Visual Studio 2010/ Visual Studio Tools/ Visual Studio Command Prompt (2010)

Esto nos levanta una ventana de comando, para ejecutar el programa wsdl.exe, en la que escribiremos lo siguiente:

wsdl http://serverdesa.company.cl/info?WSDL 
Donde  http://serverdesa.company.cl/info?WSDL es la url del webservice incluyendo '?wsdl'.



 Después de ejecutar el comando,  aparece en la pantalla la ruta donde fue generada la clase.


2.- Ahora abrimos la clase que acabamos de generar y reemplazamos todas las ocurrencias de [][] por [].


3.- Nuevamente abrimos la ventana de comando del Visual Studio y ejecutamos la siguiente linea:

Para C#:
csc.exe /t:library /r:System.dll,System.Web.Services.dll,System.XML.dll [Nombre de la clase generada].cs


Para Visual Basic:
vbc.exe  /t:library /r:System.dll,System.Web.Services.dll,System.XML.dll [Nombre de la clase generada].cs

Después de ejecutar el comando, NO APARECE en la pantalla  la ruta donde fué generada la DLL, pero la genera en la misma carpeta VC.

4.- Ahora agregamos la DLL como referencia a nuestro proyecto.

Y Listo!

Créditos:
En esta pagina vi como generar la dll a partir de la clase:

Pagina de Soporte de  Microsoft que explica como editar la clase proxy (de forma engorrosa)
español:

ingles:

viernes, 27 de enero de 2012

No aparece proyecto Instalador en Visual Studio 2010

Hoy  tuve el mismo problema de hace 6 meses y había olvidado como solucionarlo, por suerte encontré un articulo que me refrescó la memoria, el cual transcribo íntegramente y traduzco vía google.

Hoy al tratar de agregar un proyecto de instalación de otros tipos de plantillas del proyecto (Other Project Types Templates), me aparece No hay elementos encontrados (No items found). Entonces hice clic en el linjk Setup and Deployment, y  me mostró ningún elemento encontrado. Sin embargo, en la sección de extensibilidad tengo 2 modelos como complemento de Visual Studio y complementos compartidos en template.Como puedes ver en la siguiente imagen.




Es realmente un error de Microsoft. Incluso busqué mucho en Google y restablecí los ajustes por defecto en el Visual Studio 2010, sin obtener nada.

Después de eso, hice clic en el pequeño icono en la parte izquierda de la instalación e implementación que me muestra dos enlaces como InstallShield LE y Visual Studio Installer. Pero esta vez también se me está mostrando No se encontraron elementos. Hasta ahora pensé que podría estar en mi Visual Studio. Pero cuando de forma individual, al hacer clic en el enlace InstallSheild LE Tengo la plantilla InstallShield Limited Edition de apoyo.

Y cuando hice clic en el instalador de Visual Studio, me mostró templates like Setup Project, Web setup project, Merge module project, setup wizard, CAB como se muestra en la figura a continuación:



Lo vi en:

http://www.fewlines4biju.com/2011/08/vs-2010-missing-setup-and-deployment.html

viernes, 13 de enero de 2012

Ejemplo de recomendacion para LinkedIn

Hoy he encontrado una herramienta muy util para partir con ideas para escribir recomendaciones para LinquedIn, en http://recommendin.com/ es posible generar un ejemplo de recomendacion en pocos segundos, solo es necesario ingresar el nombre de la persona que deseas recomendar y un email.

A continuación veremos un ejemplo:

Llenamos los campos con el nombre de la persona que deseamos recomendar, el sexo y nuestra dirección de e-mail, presionamos el botón Generate It!.


Obtenemos una propuesta de recomendación en ingles, si la recomendación no se acerca a lo que deseamos podemos presionar el botón Try again hasta obtener una base sobre la que escribir nuestra recomendación



Otra recomendación generada automáticamente.



La recomendacion es generada en ingles, luego solo hay que copiar y pegar el texto en nuestro traductor favorito, en mi caso Google Traductor, y traducirlo al español y listo!


Con poco esfuerzo podemos obtener rápidamente recomendaciones como estas:

Juanito era una persona fantástica para trabajar. Trabajar con Juanito me lo encontré como una persona con gran educación y la experiencia profunda de soluciones de TI. Ingeniero Sabio, su flujo de trabajo maravilloso, habilidades, conocimiento y comprensión de las solicitudes de cambio hizo que el proyecto de un sueño. Al llegar a conectar con él, usted descubrirá una persona increíble con habilidades únicas!

Juanito es uno de los mejores de entre todas las personas que he conocidoTrabajar con Juanito me lo encontré como una persona con un gran reconocimiento y experiencia profunda de las soluciones de TIEmpleado ambicioso con una energía ilimitada, eso es JuanitoTieneuna fuerte capacidad de organización.

He tenido el placer de conocer a Juanito para los X últimos años de trabajo en la misma rama.Plazo para presentar la persona orientada. Independiente y estratega centrada en el clientePerfeccionista, innovador siempre dispuesta a poner toda su energía y vitalidad para hacer el trabajo. Tiene un profundo conocimiento de las modernas tecnologías de la información. Tiene una gran cantidad de conocimientos técnicos profundos.

Juanito es uno de los mejores de entre todas las personas que he conocidoHa sido un placertrabajar junto con Juanito, que era un experto inteligente. Juanito es un colega plazo orientado,proactivo y responsable con una gran habilidad para analizar y resumir las ideas¿Puede concentrarse en las tareas a la vez.

Como vemos  http://recommendin.com/ es una buena herramienta para comenzar a escribir una recomendación, pero es poco recomendable usar una recomendación auto generada sin editarla.





miércoles, 4 de enero de 2012

linq contar caracter

string parametros = "asd|123|oqiwe123d&$#$|"
long pipes = parametros.LongCount(p => p.Equals('|'));

el resultado de esto daria que pipes es igual a 3.

viernes, 9 de diciembre de 2011

error odbc oracle 11g r2 windows 7 64 bits

El error es que   cuando intento crear un odbc para Oracle, el controlador de Oracle simplemente no aparece en la lista de controladores!!

La solucion la encontré despues de navegar un buen rato:

1.  (no la he probado)  Descargaar la version del ODAC para 64 bits desde

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html


2. (esta me funcionó) Ejecutar "directorio windows"\SysWOW64\odbcad32.exe

miércoles, 3 de agosto de 2011

HOW TO: Transferir saldo desde celular movistar Chile.

Por ejemplo, si queremos transferir,500 pesos al celular 99704048 marcamos esto:

*303*2*1*99704048*500*1#

Hay sinvergüenzas que usan eso para robarle saldo a los incautos, o para que involuntariamente les transfieran saldo a sus números.

Por otra parte esto sirve para regalar saldo.

:)

miércoles, 20 de julio de 2011

Obtener el valor de un RadioButton seleccionado con JavaScript

El siguiente HTML monta un formulario de ejemplo con el cual se solicita al usuario que elija su sistema operativo favorito.
<form name="frmSO">
<input type="radio" name="so" value="windows">Windows
<input type="radio" name="so" value="linux">Linux
<input type="radio" name="so" value="osx">OSX
<input type="radio" name="so" value="other">Other
</form>
No hay una forma directa de obtener qué radio button está seleccionado y saber así su valor. Si es la primera vez que lo intentas seguramente habrás intentado hacer algo como document.form.so.value y te habrás dado cuenta que eso no funciona, y es normal ya que si te fijas en el html, tenemos 4 controles con el mismo nombre. Para poder obtener el valor seleccionado, cada “conjunto” de controles radio está representado en JavaScript mediante un array, de forma que debemos recorrer ese array para obtener la opción seleccionada. El siguiente código nos facilita el trabajo:
function getRadioButtonSelectedValue(ctrl)
{
    for(i=0;i<ctrl.length;i++)
        if(ctrl[i].checked) return ctrl[i].value;
}
Ahora ya podríamos utilizar esta función para obtener el valor seleccionado, pasándole como parámetro el control radiobutton del que queremos obtener el valor, en nuestro caso: getRadioButtonSelectedValue(document.frmSO.so);.

este post es una vil copia del que esta publicado en:

http://www.eslomas.com/index.php/archives/2005/09/05/obtener-el-valor-de-un-radiobutton-seleccionado-con-javascript/