Avatar billede simsen Mester
18. november 2011 - 13:42 Der er 5 kommentarer og
1 løsning

Ugyldig URI ved client/server projekt

Hej,

Jeg er jo igang med min klient/server projekt, hvor jeg bruger Arnes udvidede eksempel. Nu er jeg stødt ind i et problem, jeg håber en af jer kan hjælpe mig med.

Første gang jeg tilgår et interface på serveren får jeg ingen fejl. Den giver mig hvad jeg vil have (her et navn på en ansat).

Jeg henter navnet således
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
IEmployeeService employees = (IEmployeeService)Activator.GetObject(typeof(IEmployeeService), ServerSettings + "/Employees");

Nu vil jeg så hente navnet igen på en anden knap, og da jeg jo har registreret channel én gang undlader jeg denne og henter bare sådan her:

IEmployeeService employees = (IEmployeeService)Activator.GetObject(typeof(IEmployeeService), ServerSettings + "/Employees");

Nu får jeg så følgende fejlmeddelelse:

{"Ugyldig URI: Der forventedes en port, fordi der er et kolon (':'), men porten kunne ikke parses."}

Det fortæller mig så (har jeg googlet mig frem til), at det har noget at gøre med min ServerSettings (her jeg henter ip adressen og port nr, på den måde Arne har skrevet, det skal skrives:

public string ServerSettings
        {
            get
            {
                ClientSettings clientsettings = new ClientSettings();
                string serverIp = clientsettings.ServerHost;
                string serverPort = clientsettings.ServerPort;

                string hostIP = "";
               
                hostIP = "127.0.0.1:50000";

                return "tcp://" + hostIP;
            }
        }

Jeg har googlet mig frem til en metode, jeg skal bruge i stedet (hvor den tester om det er ip4 eller ip6 og den forsøger jeg så at få ind i ovennævnte metode:

public string ServerSettings
        {
            get
            {
                ClientSettings clientsettings = new ClientSettings();
                string serverIp = clientsettings.ServerHost;
                string serverPort = clientsettings.ServerPort;


                string hostIP = "";
                String strHostName = Dns.GetHostName();
                //IPHostEntry ipEntry = Dns.GetHostByAddress(serverIp + ":" + serverPort);
                IPHostEntry ipEntry = Dns.GetHostEntry("127.0.0.1:50000");
                IPAddress[] addr = ipEntry.AddressList;

                for (int i = 0; i < addr.Length; i++)
                {
                    if (addr[i].AddressFamily == AddressFamily.InterNetwork) //it is IPV4
                    {
                        hostIP = addr[i].ToString();
                        break;
                    }

                    if (addr[i].AddressFamily == AddressFamily.InterNetworkV6) //it is IPV6
                    {
                        hostIP = addr[i].ToString();
                        break;

                    }

                }

                return "tcp://" + hostIP;
            }
        }

Nu får jeg følgende fejl allerede første gang, jeg forsøger at tilgå den: {"Værten kendes ikke"}

Hvis jeg undlader :50000 (altså port nummeret) får jeg følgende fejl: {"Ugyldig URI: Der forventedes en port, fordi der er et kolon (':'), men porten kunne ikke parses."}

Nogen der ved, hvordan jeg får metoden med ip4/ip6 korrekt ind, så den kommer ud med korrekt ip adresse, så jeg kan tilgå flere metoder end bare én? :-)
Avatar billede Syska Mester
18. november 2011 - 13:56 #1
Skud i tågen.

Men tror ikke "Dns.GetHostEntry" tager en ip:port ... men bare ip eller hostname.

Det antyder følgende link i hvert fald: http://msdn.microsoft.com/en-us/library/ms143998(v=VS.100).aspx

mvh
Avatar billede simsen Mester
18. november 2011 - 14:33 #2
Hej buzzzz,

Hmmmm det vil sige, jeg ikke kan bruge den metode.....har du forslag til en anden metode, der sikrer, når det er ip6 smider den det ud som var det ip4 (og ja, jeg aner ikke hvad jeg snakker om, andet det jeg har googlet mig til, er problemet med den fejlmeddelelse *griner*)
Avatar billede simsen Mester
18. november 2011 - 14:46 #3
Kæft hvor er jeg træt.......har knoklet med det her problem i 3 timer nu og så er det en åndsvag forglemmelse fra min side....

Jeg manglede et /

IEmployeeService employees = (IEmployeeService)Activator.GetObject(typeof(IEmployeeService), ServerSettings + "/Employees");

I mit andet eksempel, jeg bruger her på siden kopierede jeg ikke koden fra programmet(som jeg BURDE have gjort, så I havde haft en chance for at se, de ikke var ens) men tog jo bare det jeg havde kopieret ind første gang (som var med /Employees).....I programmet var det uden / altså kun Employees....

Smid et svar og tak for at kigge på det :-)
Avatar billede Syska Mester
18. november 2011 - 15:00 #4
svar.

Derfor man kopiere kode og ikke laver om. Lød også som en mærkelig fejl, men vi har alle sammen nogen mærkelige dage.

Har selv lavet ting som er endnu dummere.

Bare giv mig 10 point og tag resten selv.

mvh
Avatar billede simsen Mester
21. november 2011 - 09:18 #5
buzzzz

Pænt af dig, men er ligeglad med de points - og vil gerne give dem til dig. Du er altid en af dem, der er søde og hjælpe os "dumpapper" :-)

Og ja, du har fuldstændig ret, derfor man kopierer koden (som jeg normalt også gør).....aner ikke hvorfor jeg pludselig blev magelig *griner*
Avatar billede Syska Mester
21. november 2011 - 09:31 #6
Jeg prøver da i hvert fald og hjælpe når jeg kan :-)

mvh
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