jueves, 15 de julio de 2010

Los proyectos en red no son de confianza para visual studio

Sintomas:
Cuando utilizas una unidad de red para almacenar tus proyectos, Visual Studio 2010 se queja al abrirlos porque las ubicaciones no son de confianza
Solución:
Hazla de confianza utilizando la utilidad CASPOL.EXE en una ventana de la línea de comandos abierta como Admininstrador
Sintaxis:
caspol -m -ag 1.2 -url urlname FullTrust
Ejemplo:
Ejecutando:
caspol -m -ag 1.2 -url \\servidor\recurso\proyectos\* FullTrust
Autorizaras todos los proyectos aalmacenados almacenados por debajo del directorio proyectos.
Mas información:
¿Donde está CASPOL?
CASPOL se encuentra en los directorios de las distintas versiones del framework:
C:\Windows\Microsoft.NET\Framework\vN.n.xxxxx
Y he usado la del 4.0
C:\Windows\Microsoft.NET\Framework\v4.0.30319
¿Por qué no usar Mscorcfg.msc? ¿Donde está Mscorcfg.msc?
Era lo habitual hasta la versión 2, pero desde entonces han dejado de distribuirlo con las versiones del framework posteriores, aunque se instalaba con Visual Studio.
Ahora con la versión 4.0 del framework incluso dicen que no está soportado, y ya no lo incluyencon Visual Studio 2010. Y solo queda usar CASPOL

lunes, 12 de julio de 2010

Phone manager AVAYA y problema con la "Configuración en paralelo"

Sintomas:
Al arrancar el programa PhoneManager de Avaya para IP-Office en Windows 7 recibes un error que te dice que la configuración en paralelo no es correcta y mires en el visor de eventos los detalles.
Al mirar el visor de eventos encuentras esto:
Error al generar el contexto de activación para
"C:\Program Files\Avaya\IP Office\Phone Manager\PhoneManager.exe.Manifest".
No se encontró el ensamblado dependiente Microsoft.Windows.Networking.RtcDll,language="*",processorArchitecture="X86",publicKeyToken="6595b64144ccf1df",type="win32",version="5.2.2.1".
Solución
Borra, o mejor añade una extensión bak al nombre del archivo PhoneManager.exe.manifest
Comentario:
Algún día con tiempo me dedicaré a ver el por qué y las consecuencias.

jueves, 24 de junio de 2010

datagridviewcheckboxcell y value que no cambia

Sintomas:
No se refleja los cambios realizado por el usuario cuando en el código vas a comprobar el valor de una columna checkbox en un datagridview.
Solución:
Cambiar el valor a mano con el evento on clic
Private Sub dgvListaActivos_CellMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvListaActivos.CellMouseClick

If e.Button = MouseButtons.Left And e.ColumnIndex = 1 Then
    dgvListaActivos.Rows(e.RowIndex).Cells(1).Value = Not CType(dgvListaActivos.Rows (e.RowIndex).Cells(1).Value, Boolean)
   End If
End Sub

miércoles, 16 de junio de 2010

Servicios Web en Cumulus 8.1 de Canto (dos tips)

Sintomas
La documentación de Canto en los servicios web de su DAM Cumulus es bastante pobre y hay que adivinar bastantes cosas.
Tips
En muchos casos no basta con dar un valor,  hay que decir que lo has hecho.
Por ejemplo al crear los wsItem para el metodo updateItems no basta con especificar el id de registro también hay que decirlo en .idSpecied:
New wsItem With {.id = foto.idDamFoto, .fieldValues = wsCambios.ToArray, .idSpecified = True}
Las cosas son aún mas complicadas cuando hablamos de los valores de campos, y especialmente en los de fecha que usa el valor long de Java (basado en el origen Unix de las fechas):

Public Function valorCpo(ByVal nombre As String, ByVal valor As String) As wsFieldValue
'Strings
Return New wsFieldValue With {.guid = guidsAsset(nombre), .stringValue = valor, .dataType = 0, .valueInterpretation = 0}
End Function
Public Function valorCpo(ByVal nombre As String, ByVal valor As Boolean) As wsFieldValue
'Booleanos
Return New wsFieldValue With {.guid = guidsAsset(nombre), .booleanValue = IIf(valor, 1, 0), .dataType = 1, .valueInterpretation = 0, .booleanValueSpecified = True}
End Function


Public Function valorCpo(ByVal nombre As String, ByVal valor As Date) As wsFieldValue
'fechas
Dim origen = New DateTime(1970, 1, 1, 2, 0, 0)
Dim fecha = New DateTime(valor.Year, valor.Month, valor.Day, valor.Hour, valor.Minute, valor.Second)
Dim calculoBinary As Long = (fecha.ToBinary - origen.ToBinary) * (10 ^ -4)
Return New wsFieldValue With {.guid = guidsAsset(nombre), .longValue = calculoBinary, .dataType = 4, .valueInterpretation = 0, .longValueSpecified = True}
End Function

Public Function valorCpo(ByVal nombre As String, ByVal valor As wsAssignedCategory()) As wsFieldValue
'Categoria
Return New wsFieldValue With {.guid = guidsAsset(nombre), .categories = valor, .dataType = -1, .dataTypeSpecified = True}
End Function


Public Function valorCpo(ByVal nombre As String, ByVal valor As Integer) As wsFieldValue
'valor de una lista de strings
Dim campoLista() As wsStringListValue = {New wsStringListValue With {.id = valor, .idSpecified = True}}
Return New wsFieldValue With {.guid = guidsAsset(nombre), .stringListValue = campoLista}
End Function


Y para terminar cuando hagamos el update y queramos saber si ha habido un error o no debemos consultar el status de la respuesta: 0 es correcto y 1 es error. Por ejemplo:

Public Sub TrasladaCambios(ByVal cambios() As wsItem)
Dim retorno() As wsResultStatus = serDam.updateItems(ConexDam, TablaActivos, cambios, "es")
For Each res As wsResultStatus In retorno
      If res.status <> 0 Then Err.Raise(vbObjectError + 1000, "Error actualizando DAM")
Next
End Sub

lunes, 14 de junio de 2010

IIS7.5, aplicaciones,net y System.Security.SecurityException

Sintomas:
Al migrar aplicaciones .NET que funcionaban bajo IIS6 obtienes errores del tipo:
"System.Security.SecurityException: Error de solicitud de permiso de tipo 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Solución:
Cambia el pool de la aplicación el usuario de ApplicationpPoolIdentity a NetworkService.
Comentario:
Probablemente no es una solución optima en seguridad y algún día estudiaré algo mejor

miércoles, 9 de junio de 2010

Exchange 2010 backup no borra transaction logs

Sintomas
La copia de seguridad de exchange 2010 no borra los transactions logs, y el volumén que los contiene se llena.
Contexto
La hacemos según instrucciones en technet con imagenes VSS de los volumenes donde residen la base de datos y los registro de transacciones. De paso añadimos la copia de system state.
Solución
Quitar la copia del system state de esta tarea de backup y dejar solo los volumenes.
Comentario
Las instrucciones no dicen nada de la copia de system state, pero deberían porque provoca un error que impede el borrado posterior de los transactions logs.

lunes, 31 de mayo de 2010

Google maps todavía se está cargando

Sintomas
Cuando se accede a Google Maps se recibe el mensaje Todavía se está cargando... ¿Tarda mucho? Utiliza la guía de solución de problemas o el HTML básico.
Contexto
Red con acceso a Internet mediante MS Forefront TMG.
En el registro de Forefront se recibe el error:
Intento de conexión erróneo CORTAFUEGOS 31/05/2010 16:00:27
Tipo de registro: Proxy web (directo)
Estado: 12004 Error de software en una aplicación de extensión de Windows para Internet necesaria para realizar esta operación.
...
Petición: GET http://72.14.235.104/intl/es_es/mapfiles/242c/maps2/main.js
Solución
En forefront/sistema/filtros de acceso web desactivar:
Filtro de contenido comprimido para almacenar en caché