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
jueves, 15 de julio de 2010
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.
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
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
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
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.
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é
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é
Suscribirse a:
Entradas (Atom)