Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/04/2015, 01:58
ivanlpgc
 
Fecha de Ingreso: marzo-2011
Mensajes: 13
Antigüedad: 13 años, 1 mes
Puntos: 0
SW en .NET ok, pero no funciona en ASP.NET

Buenas a todos,

os comento mi problema por si alguien pudiera darme luz sobre la solución. Partiendo de la base de que no habia trabajado nunca con .NET......un desarrollador de software nos ha dejado una DLL para poder agregarla al proyecto que tenemos que hacer en .NET. Con esta DLL podemos interactuar con su software desde nuestro nuevo programa (con este conseguimos añadir opciones que nos hacer falta y que no vienen por defecto en su software).

Después de varios días intentado aprender lo básico de .NET para arrancar, hemos conseguido que funcione. Podemos crear el objeto del tipo que nos indica el desarrolador de la DLL, llamar a sus metodos, esperar sus eventos, etc.

El ejemplo simplificado de lo que estamos haciendo es el que os pego a continuación, donde lo único que se hace es esperar al evento de cierre del programa principal para mostrar un mensaje en pantalla:


Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Solidus.BSAIntegration;



namespace WindowsFormsApplication2
{

    public delegate void Delegado_ApplicationClosedEventHandler();

    
    public partial class Form1 : Form
    {

        BSAClient cliente = new BSAClient();        


        public Form1()
        {

            InitializeComponent();

            cliente.OnApplicationClosed += new BSAClient.ApplicationClosedEventHandler(cliente_OnApplicationClosed);            

        }



        public void cliente_OnApplicationClosed()
        {
            if (this.InvokeRequired)
            {
                Delegado_ApplicationClosedEventHandler delegado = new Delegado_ApplicationClosedEventHandler(cliente_OnApplicationClosed);
                this.Invoke(delegado);
            }
            else
            {
                textBox1.Text = "BSA se cerro correctamente";
            }
        }
   
    }
}

Como os digo, por fin funciona, hemos probado casi todos los eventos, casi todas las llamadas, y parece que podemos hacer uso de todo.

El problema es que nos han pedido que lo pasemos a ASP.NET. Después de varios días mas de pruebas, mucha documentación y mucho leer, lo que hemos conseguido es poder llamar a los métodos y hacerlos funcionar, pero para lo que no hemos tenido narices es para que funcionen los eventos. La compilación no da errores, en tiempo de ejecución tampoco, simplemente (por ejemplo) al cerrar la aplicación de desarrollador debería saltar un evento de tipo "SE HA CERRADO LA APLICACIÓN", pues ni se entera, es como si no viera que se produce el evento. Creo que hemos probado todas las combinaciones (evidentemente nos falta la buena), incluso poniendo los eventos en el "global.asax", pero nada, todo igual tiempo. El codigo que tenemos para ASP.NET es:


Código:
<%@ Page Language="C#" %>
<%@ Import Namespace="Solidus.BSAIntegration" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">


    BSAClient cliente = new BSAClient();

    public event BSAClient.ApplicationClosedEventHandler ApplicationClosed;
        
    
    protected void Page_Load(object sender, EventArgs e)
    {        
        cliente.Initialize();

        cliente.OnApplicationClosed += new BSAClient.ApplicationClosedEventHandler(cliente_OnApplicationClosed);

        Label1.Text = "Se cargo la pagina";
                
    }



    protected virtual void OnApplicationClosed()
    {
        Label1.Text = "Se cerro el BSA";
    }




</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    
    <form id="form1" runat="server">
        <table align='center'>
        <tr>
            <td colspan='4' align='center'>
                <br /> <br />
                <asp:Label ID="Label1" runat="server"></asp:Label>
            </td>
        </tr>
        </table>
    </form>
</body>
</html>

Este es el código resumido solo con un evento (que no funciona), tenemos el código con varias llamadas métodos que cambian correctamente los mensajes y el estado del software (interactuan bien entre ellos), pero para recoger los eventos no hemos conseguido hacerlo funcionar.

Bueno, si se os ocurre algo muchas gracias, en caso contrario también muchas gracias por el interés por leer el mensaje.

Saludos.