jueves, 4 de mayo de 2017

TransactionScope - Timeout

El siguiente código tomará el valor de timeout por defecto (1 min.) para una nueva conexión (el valor de TransactionManager.DefaultTimeout):
 
Using tran As New Transactions.TransactionScope
tran.Complete()
End Using
Sin embargo, este otro código tomará el valor 0, que significa infinito (aunque recuerda que nunca podrá irse más allá del valor de maxTimeout (por defecto 10 min.) establecido en el machine.config).
 
Dim options As New TransactionOptions
Using tran As New TransactionScope(TransactionScopeOption.Required, options)
tran.Complete()
End Using

lunes, 17 de abril de 2017

Recorrer String con texto en XML

En este caso, se requiere agregar la información devuelta por un servicio a una lista de objetos:
xml devuelto por el servicio, almacenado en variable String "salida":
 

        JOSE LUIS                          
        BUGARIN                                 
        PECHE                                   
        19820424
        M
    
Recorremos los nodos del xml:
 
Dim listaResultado = New List(Of ObjetoBE)
Dim obj As New ObjetoBE
Dim xml As XDocument = XDocument.Parse(salida)
Dim resultadoXML = xml.Descendants("RESPUESTA")
If resultadoXML.Count > 0 Then
     For Each nodo As XElement In resultadoXML
        Dim Nnombre = nodo.Descendants("NOMBRES").FirstOrDefault
        obj .Nombres = IIf(IsNothing(Nnombre), "", Nnombre.Value.Trim)

        Dim NApePaterno = nodo.Descendants("APPAT").FirstOrDefault
        obj .ApePaterno = IIf(IsNothing(NApePaterno), "", NApePaterno.Value.Trim)

        Dim NApeMaterno = nodo.Descendants("APMAT").FirstOrDefault
        obj .ApeMaterno = IIf(IsNothing(NApeMaterno), "", NApeMaterno.Value.Trim)

        Dim NFechaNacimiento = nodo.Descendants("FENAC").FirstOrDefault
        obj .FechaNacimiento = IIf(IsNothing(NFechaNacimiento), "", NFechaNacimiento.Value.Trim)

        Dim NSexo = nodo.Descendants("SEXO").FirstOrDefault
        obj .Sexo = IIf(IsNothing(NSexo), "", NSexo.Value.Trim)
    Next

    listaResultado.Add(obj)
Else
    mensaje = "No devolvió resultados"
End If

Convertir una Imagen a Byte y Byte a Imagen

Las siguientes funciones convierten una imagen desde una ruta física a byte y viceversa...
 
Public Function ConvertirImagen_Byte() As Byte()
    Dim rutaImagen = "D:\Documentos\ImagenOrigen\s1.jpg"
    Using foto As FileStream = New FileStream(rutaImagen, FileMode.Open)
        Dim reader As BinaryReader = New BinaryReader(foto)
        Dim imagen(foto.Length) As Byte
        reader.Read(imagen, 0, Convert.ToInt32(foto.Length))
        Return imagen
    End Using
End Function


Protected Sub ConvertirByte_Imagen(ImgBytes As Byte())
    Dim ruta As String = "D:\Documentos\ImagenDestino\s1.jpg" 
    Dim ms As MemoryStream = New MemoryStream(ImgBytes)
    Dim imagen = New System.Drawing.Bitmap(ms)
    imagen.Save(ruta, System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub

jueves, 23 de marzo de 2017

Alert() con salto de línea.

Muchas veces es necesario incluir en un alert varios mensajes de error, la siguiente solución esta planteada para vb.net y C# con Javascript.

VB.NET:
 
Dim strMensaje As String = ""
strMensaje += "- Ingrese texto A." + "\r\n"
strMensaje += "- Ingrese texto B." + "\r\n"
ScriptManager.RegisterStartupScript(Me, Me.GetType, "alerta", "alert('" & strMensaje & "');", True)

C#:
 
String strMensaje = "";
strMensaje += "- Ingrese texto A." + "\\n";
strMensaje += "- Ingrese texto B." + "\\n";
ScriptManager.RegisterStartupScript(this, this.GetType(), "alerta", "alert('" + strMensaje + "');", true);


Saludos.

lunes, 12 de diciembre de 2016

Gridview no se muestra a mayor cantidad de resultados

agregar lo siguiente en el appSettings del web.config:

<add key="aspnet:MaxHttpCollectionKeys" value="2147483647" />
<add key="aspnet:MaxJsonDeserializerMembers" value="2147483647" />

jueves, 13 de octubre de 2016

Web config en Servicio WCF

Hola a todos, al elaborar y publicar servicios WCF, muchas veces no recordamos que colocar en el config; por tal motivo les comparto un ejemplo básico de lo que debería contener:
 

  
    
  
  
    
    
  
  
    
      
        
        
        
          
            
          
        
      
    
    
      
        
          
          
        
      
    
    
      
        
          
          
        
      
    
  


Nota:
Al publicar tu servicio, se deberá modificar la url de la sección :
<add baseAddress="http://localhost:8732/Design_Time_Addresses/SMV.EncuestaSC.WCF/ServiceSC/" />
por la url que corresponda en el servidor web.

viernes, 22 de julio de 2016

COM Excel - Word error: 80070005 Acceso denegado IIS

En mi caso, mi aplicación al tratar de modificar un archivo excel me mostraba el siguiente error:

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied.

la solución que encontré es lo siguiente:

a) Si la app se esta usando ApplicationPoolIdentity, realizar lo siguiente:
  • Presionar las teclas “Windows + R”; ingresar el texto dcomcnfg y presionar el botón Aceptar
  • Servicios de componentes -> Equipos -> Mi PC -> Configuración DCOM, buscar “Microsoft Excel Application” y seleccionar botón derecho propiedades.
  • En Pestaña Identidad, elegir la opción "El usuario interactivo"
  • En pestaña Seguridad, editar para todos los “Customize”, el usuario “IIS_IUSRS“ (si no lo encuentras, búscalo en localización: “Servidor” )

b) Si la app esta usando usuario de aplicación, otra opción sería realizar lo siguiente:
  • Presionar las teclas “Windows + R”; ingresar el texto dcomcnfg y presionar el botón Aceptar
  • Servicios de componentes -> Equipos -> Mi PC -> Configuración DCOM, buscar “Microsoft Excel Application” y seleccionar botón derecho propiedades.
  • En Pestaña Identidad, elegir la opción "Este Usuario" (colocar el usuario de aplicación)
(*) En caso no encuentren "Microsoft Excel Application", pueden probar ingresar a través de la ruta C: WINDOWSSysWOW64> mmc comexp.msc o ejecutando el siguiente comando: mmc comexp.msc /32

(*)Si es archivo word:
realizar los mismos pasos anteriores, pero buscar " Documento Microsoft Word " y / o " Aplicación Microsoft Word " o “Microsoft Word 97 -2003 Document” o algo que diga Word. si aun no encuentra buscar "{00020906-0000-0000-C000-000000000046}".