Avatar billede dj Nybegynder
27. oktober 2003 - 16:59 Der er 6 kommentarer og
1 løsning

Check om en metode er blevet kaldt over channels?

Hejsa allesammen

Lige et lille hurtigt spørgsmål, jeg har søgt google tynd og sjovt nok lader det ikke til at være et ret ofte stillet spørgsmål.

Men er der nogen af jer der ved hvordan man kan tjekke om en metode bliver kaldt kaldt remotely ?

Jeg vil gerne kunne skelne mellem et kald lavet internt på serveren og et kald udført over channels, det skyldes at jeg er ved at lave et sikkerhedslag til remote channels og der vil jeg gerne have at det lag kun træder i kraft hvis metoden kaldes remote, ikke ved interne serverkald.

Jeg ønsker ikke nogen alternative løsninger, alt jeg spørger om er om det kan lade sig gøre og i så fald hvordan at tjekke det, så hold jer venligst til det :)

Har smidt 150 point på højkant som tilfalder den første der giver et korrekt svar, dette skyldes også at det haster lidt så jeg vil meget gerne have et hurtigt svar :)
Avatar billede arne_v Ekspert
27. oktober 2003 - 21:01 #1
Lad din kode checke sin stack frame !

Eksempel:

using System;
using System.Diagnostics;
using System.Reflection;

public class Test : MarshalByRefObject
{
        public string dup(string s)
        {
                if(isremote())
                {
                    Console.WriteLine("Called remote");
                }
                else
                {
                    Console.WriteLine("Called local");
                }
                return (s + s);
        }
    public bool isremote()
    {
     
        StackTrace trace = new StackTrace(true);
        for(int i = 0; i < trace.FrameCount; i++)
        {
            StackFrame frame = trace.GetFrame(i);
            MethodBase method = frame.GetMethod();
            if(method.DeclaringType.ToString().IndexOf("System.Runtime.Remoting.Channels.") ==  0)
                {
                  return true;
                }
        }
            return false;
    }
}
Avatar billede dj Nybegynder
27. oktober 2003 - 23:18 #2
Det var også min første tanke, men virker desværre ikke i dette tilfælde (beklager at jeg glemte at nævne det i første omgang) da System.Runtime.Remoting.Channels og lign. ikke findes i den thread der styrer sikkerhedshåndteringen.

Jeg har brug for en løsning der ikke benytter sig af stacken, jeg skal dog nok give dig et par point da det lidt er min fejl at jeg glemte at nævne det i første omgang :)
Avatar billede arne_v Ekspert
28. oktober 2003 - 07:45 #3
Jeg tror det bliver svært så.

Fordi hvad helt præcist identificerer "remote" og "local" så ?

Parent thread stack frame ??
Avatar billede dj Nybegynder
28. oktober 2003 - 10:25 #4
Du har ret i den ikke er helt nem, hvilket også er en af grundene til at jeg for en sjælden gangs skyld har oprettet et spørgsmål herinde :)

Jeg er endda heller ikke sikker på at det overhovedet kan lade sig gøre, men nu må vi jo se om der er nogen der kender et trick.
Avatar billede arne_v Ekspert
16. november 2003 - 22:35 #5
Fandt du en løsning ?
Avatar billede arne_v Ekspert
11. december 2003 - 21:37 #6
Lukke tid ?
Avatar billede dj Nybegynder
19. februar 2004 - 15:35 #7
hov opdagede lige jeg havde glemt at lukke spørgsmålet, jeg beklager den lange ventetid og pointene er hermed dine. Tak for svaret, vores løsning blev faktisk baseret på at iterere stackframen :)
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