Cercar en aquest blog

24/1/11

Distribució del negoci (PART V)

En aquest post, intentaré explicar com accedir al negoci distribuit (a una part d'ell), des d'una aplicació client desenvolupada en Winforms. Per fer-ho utilitzarem el nostre proxy transparent.
Abans de res hem de referenciar dues llibreries, la del proxy transparent "TransparentProxy.dll" i la de la interfície del negoci distribuit amb els missatges que utilitzem per intercanviar informació amb els clients, "ServeisDistribuits.Ingresos.dll".

 Primerament el que farem és crear una interfície amb les operacions que s'executaràn des de lapart client.

using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WinIngressos
{
    interface IForm1Negoci
    {
        IList<serveisdistribuits.ingresos.informaciollits>
                                             Carregar_Llits();
        IList<serveisdistribuits.ingresos.informaciometges>
                                            Carregar_Metges();
        IList<serveisdistribuits.ingresos.informaciopacient>
  Cercar_Pacient(ServeisDistribuits.Ingresos.CriteriCercarPacient criteri);

        ServeisDistribuits.Ingresos.ResultatOperacio
    Ingressar_Pacient(ServeisDistribuits.Ingresos.DadesIngres dades);


    }
}





Tot seguit fem un dissany de la pantalla, amb els components que lligarem amb les funcions o operacions.




Si ens hi fixem, formulari consta de les següents parts:
  1. Una Grid o mostrarem els resultats de la cerca de pacients.
  2. Un TextBox on entraren el criteri de recerca de pacients utilitzant un senzill patró d'entrada, Cognom1/Cognom2/Nom.
  3. Un ComboBox amb el llistat de metges.
  4. Un ComboBox amb el llistat d'habitacions.
  5. Un Button per enviar les dades de l'ingrés, Pacient-Metge-Llit.
  6. I un TextArea on mostrar el resultat de la transacció. Tota operació del negoci que persisteixi dades, ha de ser Transaccional.
Tot seguit he de conectar les operacions del client amb les operacions del negoci (servei distribuit). Per fer-ho utilitzarem el proxy transparent, i implementarem les operacions del client.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace WinIngressos
{
    public class Form1ServeiNegoci:IForm1Negoci
    {

        

        public IList<ServeisDistribuits.Ingresos.InformacioLlits> Carregar_Llits()
        {
            WSHttpBinding bind = CrearVincul();

            TransparentProxy.IProxy<ServeisDistribuits.Ingresos.IModulPrincipal> proxy = new TransparentProxy.Proxy<ServeisDistribuits.Ingresos.IModulPrincipal>(bind, "http://localhost:53538/WCFGAPService/Service.svc", null, null);
            IList<ServeisDistribuits.Ingresos.InformacioLlits> res=proxy.Client.LlistarLlits(ServeisDistribuits.Ingresos.LlitEstats.Buits);
            proxy.Close();
            return res;
        }

        public IList<ServeisDistribuits.Ingresos.InformacioMetges> Carregar_Metges()
        {
            WSHttpBinding bind = CrearVincul();

            TransparentProxy.IProxy<ServeisDistribuits.Ingresos.IModulPrincipal> proxy = new TransparentProxy.Proxy<ServeisDistribuits.Ingresos.IModulPrincipal>(bind, "http://localhost:53538/WCFGAPService/Service.svc", null, null);
            IList<ServeisDistribuits.Ingresos.InformacioMetges> res = proxy.Client.LListarMetges();
            proxy.Close();
            return res;
        }

        public IList<ServeisDistribuits.Ingresos.InformacioPacient> Cercar_Pacient(ServeisDistribuits.Ingresos.CriteriCercarPacient criteri)
        {
            WSHttpBinding bind = CrearVincul();

            TransparentProxy.IProxy<ServeisDistribuits.Ingresos.IModulPrincipal> proxy = new TransparentProxy.Proxy<ServeisDistribuits.Ingresos.IModulPrincipal>(bind, "http://localhost:53538/WCFGAPService/Service.svc", null, null);

            IList<ServeisDistribuits.Ingresos.InformacioPacient> res = proxy.Client.CercarPacient(criteri);
            proxy.Close();
            return res;
        }

        public ServeisDistribuits.Ingresos.ResultatOperacio Ingressar_Pacient(ServeisDistribuits.Ingresos.DadesIngres dades)
        {
            WSHttpBinding bind = CrearVincul();

            TransparentProxy.IProxy<ServeisDistribuits.Ingresos.IModulPrincipal> proxy = new TransparentProxy.Proxy<ServeisDistribuits.Ingresos.IModulPrincipal>(bind, "http://localhost:53538/WCFGAPService/Service.svc", null, null);

            ServeisDistribuits.Ingresos.ResultatOperacio res = proxy.Client.Ingresar(dades);
            proxy.Close();
            return res;
        }


        private WSHttpBinding CrearVincul()
        {
            WSHttpBinding bind=new WSHttpBinding();
            bind.Security.Mode = SecurityMode.Message;
            bind.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
            bind.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
            bind.Security.Message.NegotiateServiceCredential = true;
            return bind;
        }
    }
}


Una de tantes maneres de fer, però que crec, que es bastant ordenada, separada per capes, seguint els principis de la POO.

I finalmet només ens falta lligar la interfície amb el negoci. Posaré un exemple, laresta es bastant evident.

using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinIngressos
{
    public partial class Form1 : Form
    {
        private IForm1Negoci negoci = null;
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            negoci = new Form1ServeiNegoci();

            // Carreguem combos

            this.comboBox2.DataSource = negoci.Carregar_Llits();
 

            ................

I això es tot, la resta, imaginació.