Lesen der IP-Adresse eines Anrufers in WCF (OperationContext ist null)?

8

Ich validiere Benutzer mit dem UserNamePasswordValidator.Validate (String-Benutzername, String-Passwort) und der Dienst hostet sich selbst (z. B. kein IIS).

Das Problem, das ich habe, ist, dass, wenn der Benutzer die Validierung nicht besteht, ich die IP-Adresse des Benutzers verfolgen möchte. Dies funktioniert einwandfrei, wenn der Benutzer validiert wird, weil dann der OperationContext initialisiert wurde (er ist null innerhalb der Validierungsmethode und wird erst später erstellt).

Weiß jemand, wie man die IP-Adresse des Clients entweder in der validate-Methode oder vor der Ausführung der validate-Methode erhält?

Ja, ich weiß, wie man die IP-Adresse mit RemoteEndpointMessageProperty abruft, aber wie gesagt, es kommt nie so weit, wenn die Validierung fehlschlägt: -)

    
Luke Puplett 19.01.2009, 14:06
quelle

2 Antworten

1

Ich habe die ganze Woche über zu Tode geforscht und kann keinen einzigen Blogeintrag oder MSDN-Artikel finden, der sich mit dem Thema beschäftigt.

Soweit ich das beurteilen kann, können Sie die IP-Adresse während der Validierungsphase nicht protokollieren.

Die einzige Problemumgehung, die ich vorschlagen kann, besteht darin, in IIS zu hosten und dort die Weblogs zu verwenden, die die IP-Adresse protokollieren. Es ist leider schmerzhaft, aber es könnte der einzige Weg sein.

    
Randolpho 11.05.2009 18:14
quelle
0

Wenn Sie in IIS hosten, wird dies viel einfacher. Dieser Konfigurationsabschnitt kommt direkt von meinem Hosting-Webprojekt und zwingt ASP.NET-Anforderungen, die IIS-Pipeline herunterzufahren, anstatt direkt an die ASP-Fehlerbits von IIS gesendet zu werden.

aspNetCompatibilityEnabled: Wenn dieses Attribut auf gesetzt ist  True, Anforderungen an Windows Communication Foundation (WCF) -Dienste  Durchlaufen der ASP.NET HTTP-Pipeline und Kommunikation über  Nicht-HTTP-Protokolle sind verboten.

Siehe: Ссылка

%Vor%

Ich benutze den AuthenticationService und nutze den HttpContext, um all die interessanten Dinge über den Client zu bekommen. Vieles davon ist nützlich, um sicherzustellen, dass sich ein Benutzer nicht aus sechs verschiedenen Subnetzen einloggt und mit ihm herumspielt Cookies.

Obwohl ich denke, dass dies auf den MS AuthenticationService angewendet wird, benötigen alle anderen Dienste, die Sie haben, dieses Attribut:

[AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Wenn Sie Ihre nicht von IIS gehostete Service-Route verfolgen möchten, dann würde ich mithilfe von Reflektion sehen, welche Inhalte in der MS-API verfügbar sind, indem Sie während des Stopps auf einer WCF mit dem Debugger herumstochern und all diese nicht-öffentlichen Mitglieder entfalten .

Ich nehme an, dass das Problem darin besteht, einen Verweis auf ein WCF-Bit zu erhalten, das initialisiert wird, um mit dem Stochern zu beginnen. Möglicherweise müssen Sie bei der Einrichtung des Service-Hosts eine Art Listener für einen der Dispatcher registrieren.

Ссылка

Bearbeiten:

Wenn ich diesen Link hinzufüge, denke ich, dass man sich in WCF Sachen holen muss, die ganz unten auf dem Stack liegen, bevor es zu deinem Code kommt:

Ссылка

    
Luke Puplett 26.06.2009 09:29
quelle

Tags und Links