Avatar billede fredag1 Nybegynder
28. december 2006 - 23:05 Der er 13 kommentarer

Client server spm

Jeg forsøget at lave an simple client server. Sådan:
using System;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;


namespace Wrox.ProCshap.Remoting
{
  public class HelloClient
    {
      public static void Main(string[] args)
        {
          ChannelServices.RegisterChannel(new HttpClientChannel());
          HelloClient obj = (HelloClient)Activator.GetObject(typeof(HelloClient), "http://localhost:8086/Hi");
          if (obj ==null)
          {Console.WriteLine("could not locate server");
              return;
          }

          for (int i=0; i<5;i++)
          {Console.WriteLine("Lars..");
          }

        }
  }
}
---------------------------------
Men jeg få fejl ved
HelloClient obj = (HelloClient)Activator.GetObject(typeof(HelloClient), "http://localhost:8086/Hi");
den viser ovenstående og siger exception arised.
-----------------------------------------------
Serveren ser sådan ud
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace ServerApplication
{
    class HelloServer
    {
      public  static void Main(string[] args)
        {
            TcpServerChannel channel = new TcpServerChannel(8086);
            ChannelServices.RegisterChannel(channel);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(HelloServer), "Hi", WellKnownObjectMode.SingleCall);
            System.Console.WriteLine("Press an key to return");
            System.Console.ReadLine();
        }
    }
}
Avatar billede arne_v Ekspert
29. december 2006 - 01:07 #1
hvad er hele fejl teksten ?
Avatar billede fredag1 Nybegynder
29. december 2006 - 04:23 #2
trying to create a proxy to an unbound type
og så peger den på:
HelloClient obj = (HelloClient)Activator.GetObject(typeof(HelloClient), "http://localhost:8086/Hi");
Avatar billede arne_v Ekspert
30. december 2006 - 04:45 #3
arver HelloClient fra MarshalByRefObject ?
Avatar billede fredag1 Nybegynder
30. december 2006 - 09:42 #4
Skal den gøre det? Hvad skal jeg skrive isteded?
HelloClient er bare defineret som ovenfor.
Avatar billede md_craig Nybegynder
30. december 2006 - 13:34 #5
Der er sådan set lidt flere ting galt der...

På Client siden leder du efter et object af typen HelloClient, og på serversiden registerer du HelloServer til at være dit remote object...

Det skal være det samme på begge sider... og begge sider skal kende objecttypen.

Så skal dit remote object som Arne siger, arve fra MarshalByRefObject for at kunne kaldes remote...
Avatar billede arne_v Ekspert
30. december 2006 - 16:08 #6
efter at have nærlæst koden lidt - der mangler en klasse !

du skal mindst have 3 klasser:
  dit server program
  dit client program
  din remoting klasse
Avatar billede arne_v Ekspert
30. december 2006 - 16:09 #7
Avatar billede fredag1 Nybegynder
30. december 2006 - 22:56 #8
Jeg har lavet det tredie klasse remoting klass.
Men når jeg skriver
using remoting;
siger den at der er ikke nogen remoting;
hvad skal jeg skrive istedet.
Avatar billede arne_v Ekspert
30. december 2006 - 23:44 #9
har du et namespace der hedder remoting ?
Avatar billede fredag1 Nybegynder
31. december 2006 - 10:44 #10
Ja men når jeg srive Using remoting i Client program siger den kan ikke finde det.
Avatar billede arne_v Ekspert
31. december 2006 - 17:11 #11
har du en reference til DLL'en som indeholder remoting ?
Avatar billede fredag1 Nybegynder
31. december 2006 - 17:37 #12
Ja
Nu er jeg kommet så langt.
Der er en reference til følgende:
using System;

namespace Wrox.ProCSharp.Remoting
{
    public class Hello : System.MarshalByRefObject
    {
        public Hello()
        {
            Console.WriteLine("Contructor called");
        }
        ~Hello()
        {
            Console.WriteLine("Deconstructor called");
        }
        public string Greeting(string name)
        {
            Console.WriteLine("Greeting Called");
            return "hello, " + name;
        }
       
    }
}
---------------------------------------------------
Client:
using System;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Wrox.ProCSharp.Remoting;
namespace Wrox.ProCshap.Remoting
{
    public class HelloClient
    {
      public static void Main(string[] args)
      {
          ChannelServices.RegisterChannel(new TcpClientChannel());
          Hello obj = (Hello)Activator.GetObject(typeof(Hello), "http://localhost:8086/Hi");
          if (obj ==null)
          {Console.WriteLine("could not locate server");
          Console.ReadLine();
              return;
          }

          for (int i=0; i<5;i++)
          {
              Console.WriteLine(obj.Greeting("hjgkjgkj"));
          }
          Console.ReadLine();
        }
  }
}
-------------------------------------------------------------------
Server
sing System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Wrox.ProCSharp.Remoting;


namespace Serverapplication
{
  public class HelloServer
    {
        public static void Main(string[] args)
        {
            TcpServerChannel channel = new TcpServerChannel(8086);
            ChannelServices.RegisterChannel(channel);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello), "Hi",WellKnownObjectMode.SingleCall);
            System.Console.WriteLine("Press any key to exite");
            System.Console.ReadLine();
        }
    }

}
---------------------------------------
Jeg få en server violation fejl
dette linie med gult:
Console.WriteLine(obj.Greeting("hjgkjgkj"));
Avatar billede fredag1 Nybegynder
31. december 2006 - 19:17 #13
Altso class Hello er gemt i library class og der er referencer til dll filen fra
både server og client.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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