Avatar billede cogitans Nybegynder
01. august 2007 - 08:42 Der er 2 kommentarer

Remotingobjekter skal sættes ind de rigtige steder i aspx-siden

Jeg har lavet dette remotingeksempel, som virker:

using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Collections.Generic;
using System.Text;

namespace EgetRemoting
{
        public class SampleObject : MarshalByRefObject
        {
            public SampleObject()
            {
            }

            public string HelloWorld()
            {
                return "Hello World!";
            }
        }
}

namespace RemotingImplementation
{
    class SampleServer
    {
        public static int Main(string[] args)
        {
            // Create an instance of a channel
            TcpChannel channel = new TcpChannel(8080);
            ChannelServices.RegisterChannel(channel);

            // Register as an available service with the name HelloWorld
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(SampleObject),
                "HelloWorld",
                WellKnownObjectMode.SingleCall);

            System.Console.WriteLine("Press the enter key to exit...");
            System.Console.ReadLine();
            return 0;
        }
    }
}

namespace ClientRemoting
{
    /// <remarks>
    /// Sample client to demonstrate the use of .NET Remoting.
    /// </remarks>
    public class SampleClient
    {
        public static int Main(string[] args)
        {
            // Create a channel for communicating w/ the remote object
            // Notice no port is specified on the client
            TcpChannel chan = new TcpChannel();
            ChannelServices.RegisterChannel(chan);

            // Create an instance of the remote object
            SampleObject obj = (SampleObject)Activator.GetObject(
                typeof(EgetRemoting.SampleObject),
                "tcp://localhost:8080/HelloWorld");

            // Use the object
            if (obj.Equals(null))
            {
                System.Console.WriteLine("Error: unable to locate server");
            }
            else
            {
                Console.WriteLine(obj.HelloWorld());
            }
            return 0;
        }
    }
}

Jeg har også lavet en aspx-side med tilhørende database. Aspx-siden foretager nogle kald til databasen igennem codebehind. Netop dette vil jeg gerne lave om, sådan at jeg starter er remoting-server, som jeg så kalder gennem aspx-siden, som får data fra databasen serveret over remoting serveret af serveren.

Aspx-siden ser således ud (selve kaldene er testet):

protected void Button1_Click(object sender, EventArgs e)
{
  try
  {
      TextBox3.Text = server.countOperationnumber(TextBox1.Text.ToString(), TextBox2.Text.ToString(), 1).ToString();
      TextBox4.Text = server.countOperationnumber(TextBox1.Text.ToString(), TextBox2.Text.ToString(), 2).ToString();
      TextBox5.Text = server.countOperationnumber(TextBox1.Text.ToString(), TextBox2.Text.ToString(), 3).ToString();
      TextBox6.Text = server.countOperationnumber(TextBox1.Text.ToString(), TextBox2.Text.ToString(), 4).ToString();
      }
      catch (Exception ex)
      {
          System.Diagnostics.Debug.Write("\n*************FEJL:***************\n");
          System.Diagnostics.Debug.Write("\n Fejlen er: " + ex.ToString() + "\n");
              System.Diagnostics.Debug.Write("\n*********************************\n");
    }
  }

Databasefilen/kaldet ser således ud:

public int countOperationnumber(string startdato, string slutdato, int OpTypegruppenr)
{
  try{
    string sqlString = "SELECT Count Operationsstuer.OpTypegruppenr) AS CountOfOperationsnr FROM Operationsstuer HAVING ((Operationsstuer.Operationsdato)>='" + startdato + "' AND (Operationsstuer.Operationsdato)<='" + slutdato + "' AND ((Operationsstuer.OpTypegruppenr)=" + OpTypegruppenr + "))";
              OleDbConnection connection1 = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=....mdb");
              OleDbCommand command1 = new OleDbCommand(sqlString, connection1);
              connection1.Open();
              int set1 = (int)command1.ExecuteScalar();
              connection1.Close();
              return set1;
            }
            catch (Exception ex)
            {
              System.Diagnostics.Debug.Write("\n Fejlen er: \n" + ex.ToString() + "\n");
            }
            return 0;
        }

Da alt er gennemtestet hver for sig, burde det vel være forholdsvis nemt og ligetil at sætte det sammen, så det fungerer. Problemet er blot, at jeg har mistet overblikket...og at jeg ikke har så meget erfaring indenfor remoting :-)

Er der nogle, som venligst kan hjælpe mig med at får den opskrevne kode sat rigtigt sammen ?
Avatar billede cogitans Nybegynder
01. august 2007 - 13:16 #1
Skal der egentlig sætte listeners på serverklassen (altså i Main), når man kan kalde forskellige metoder i den, og der derfor skal forekomme et tjek af argumenter i kaldet?
Avatar billede cogitans Nybegynder
02. august 2007 - 10:20 #2
Det gav lidt overblik, at jeg satte koden her ind på sitet. Jeg tror, jeg har fået sat koden ind de rigtige steder nu.
Jeg kan dog ikke få afviklet koden. Selve serverklassen kan jeg ikke få startet op. Når jeg forsøger at starte den, skriver den:
SampleServer.cs(26, 24): error CS0246: The type or namespace name 'dbKald' could not be found (are you missing a using directive or an assembly reference?)

Hvad gør jeg forkert?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester