Avatar billede maze- Nybegynder
23. april 2007 - 15:51 Der er 5 kommentarer og
1 løsning

Remoting : Overførelse af egne klasser

Hej alle eksperter

Jeg har lavet noget remoting vha interface, men har lidt problemer med at overføre objekter jeg selv har lavet.

Klienten(har ref. til Common) indeholder
myObj og Program

using System;
using System.Collections.Generic;
using System.Text;

namespace Client
{
    [Serializable]
    public class myObj : MarshalByRefObject
    {
        private string data;

        public myObj(string data)
        {
            this.data = data;
        }

        public string getData()
        {
            return data;
        }
    }
}


using System;
using System.Runtime.Remoting;
using Common;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            ImyInterface myI = (ImyInterface)RemotingServices.Connect(typeof(ImyInterface),
                "http://localhost:8085/myServer.rem");

            //Skriver en string
            Console.WriteLine(myI.getString());

            //Henter og objekt og skriver value ud
            myObj obj = myI.getObj();
            Console.WriteLine(obj.getData());

            Console.ReadLine();
        }
    }
}


Common indeholder
using System;
using System.Collections.Generic;
using System.Text;

namespace Common
{
    public interface ImyInterface
    {
        string getString();
        myObj getObj();
    }
}


Server indeholder (har ref til Common)
myObj(samme som klient), Program og Server

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            IChannel channel = new HttpChannel(8085);
            ChannelServices.RegisterChannel(channel, false);

            RemotingConfiguration.RegisterWellKnownServiceType(typeof(myServer),
                                                                "myServer.rem",
                                                                WellKnownObjectMode.SingleCall);
            Console.WriteLine("Server Running - Press <Enter> to quit");
            Console.ReadLine();
        }
    }
}


using System;
using Common;

namespace Server
{
    class myServer : MarshalByRefObject, ImyInterface
    {
        myObj obj;

        public myServer()
        {
            this.obj = new myObj("Obj test");
        }

        public string getString()
        {
            return "String test";
        }

        public myObj getObj()
        {
            return obj;
        }
    }
}

Håber der er en der kan hjælpe, er garanteret en lille ting. String tingen virker fint, men udbyggelse med overførelse af objekter er FUBAR.

Maze-
Avatar billede arne_v Ekspert
23. april 2007 - 18:26 #1
proev og lig myObj i common, saa server og client henter den klasse fra samme DLL
Avatar billede maze- Nybegynder
24. april 2007 - 09:36 #2
Ja selvfølelig, havde lige slet ikke lige tænkt over at de begge selvfølelig kender Common.

Smid et svar så kommer pointene.

Lukker
Avatar billede maze- Nybegynder
24. april 2007 - 09:58 #3
Lige et bonusspørgsmål hvis du har lyst.

Nu vil jeg så impl. et obj der arver. Både obj. og obj. der arves fra ligger i Common, men Visual Studio brokker sig stadig over assecibility.

Samt nede i Server, brokker den sig over protectionlevel.

Er der nogen specialt ved brug af arv? Eller er det bare mig der ikke fatter C#? =)
Avatar billede maze- Nybegynder
24. april 2007 - 10:13 #4
Fandt ud af det med arv, det var bare fordi jeg ikke havde skrevet "private" eller "public" foran "class abstract mySuperObj", og default må jo så være "private".
Avatar billede arne_v Ekspert
24. april 2007 - 13:56 #5
default er nok snarere internal

og et svar
Avatar billede md_craig Nybegynder
24. april 2007 - 14:14 #6
som arne siger er default Internal, (dvs. kun synlig i samme assembly) når vi snakker klasser... metoder og fields er default private afaik
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