Entwickler-Ecke

Verteilte Systeme - WCF: Terminalserver-Clientname auf Serviceseite extrahieren


GunHawK - Mo 24.03.14 13:23
Titel: WCF: Terminalserver-Clientname auf Serviceseite extrahieren
Hallo zusammen,

Ich habe folgendes System:

Auf einem PC läuft ein WCF Service. Auf einem Terminalserver läuft beispielsweise unter den beiden angemeldeten Usern "Ben" und "John" jeweils ein Client.
Im WCF Service ermittle ich folgendermaßen die IP des Clients:

C#-Quelltext
1:
2:
3:
4:
5:
6:
    RemoteEndpointMessageProperty clientEndpoint = null;
     ...
    clientEndpoint = OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as emoteEndpointMessageProperty;
    clientName = System.Net.Dns.GetHostEntry(clientEndpoint.Address).HostName;               
                
    clientIP = clientEndpoint.Address;


Allerdings ist natürlich die IP bzw. der Hostname des aufrufenden Clients immer gleich, nämlich die IP/Host des Terminalservers.

Gibt es eine Möglichkeit in meinem WCF Service herauszubekommen, von welchem Client (Ben oder John) auf dem Terminalserver die Anfrage kommt?

Mfg


Ralf Jansen - Mo 24.03.14 13:43

Wenns ein authentifizierter Kanal ist könnte man den Usernamen (bekommst du über den ServiceSecurityContext am OperationContext) auswerten.
Ansonsten hast du denke ich nur den Port am Endpoint woran du die Clients unterscheiden kannst.

Wenn du mehr wissen möchtest und das nicht Sicherheitsrelevant ist solltest du die Daten vielleicht einfach mit dem Service Call mitsenden.


GunHawK - Mo 24.03.14 14:07

Danke für deine promte Antwort!

Mit "authentifizierter Kanal" meinst du, ob ich die WCF Authentifizierung verwende?
Nein, es wird keine verwendet(eigene Authentifizierung). Das Binding ist basicHttpBinding, und der InstanceContextMode ist PerCall.

Ich hab den ServiceSecurityContext mal abgefragt, aber er ist leider null.

Das Problem ist, dass die Info wegen Lizenzabfrage sicherheitsrelevant ist. Wenn z.b. ein 3rd Partyclient den Usernamen selbst eingeben könnte, woher weiß ich, ob dieser immer stimmt. Hier wäre es halt gut gewesen, wenn ich die Infos vom WCF bekomme.

Nun, wenns nicht geht, müssen wir uns halt was anderes einfallen lassen.

Mfg