Frage

Ich habe eine Web-Anwendung in einem Internet-Hosting-Provider bereitgestellt. Diese Web-Anwendung verbraucht eine WCF-Dienst auf einem IIS-Server bereitgestellt befindet sich in meiner Firma Anwendungsserver, um den Datenzugriff auf die Unternehmensdatenbank zu haben, erlaubt die Netzwerk-Jungs mir diese WCF-Dienst über eine Firewall aus Sicherheitsgründen zu belichten. Ein Diagramm würde wie folgt aussehen.

  

[Hosted Seite] ---> (Internet) ---> | Firewall <Public IP>:<Port-X > |   ---> [IIS mit WCF-Dienst <Comp. Network Ip>:<Port-Y>]

Ich wollte auch wsHttpBinding nutzen die Vorteile der Sicherheitsmerkmale zu nehmen und sinnvolle Informationen verschlüsseln.

Nach dem Versuch, es aus mir die folgenden Fehlermeldung erhalten:

  

Ausnahmedetails: System.ServiceModel.EndpointNotFoundException: Die   Nachricht mit To 'http: //: /service/WCFService.svc' kann nicht sein,   am Empfänger verarbeitet werden, aufgrund einer Fehlpaarung an der Address   EndpointDispatcher. Überprüfen Sie, ob der Absender und der Empfänger des   EndpointAddresses zustimmen.

Doing einige der Forschung fand ich heraus, dass wsHttpBinding verwendet WS-Addressing Standards und Lesen über diesen Standard ich gelernt, dass die SOAP-Header wird verbessert Tags wie 'MessageID' gehören, 'ReplyTo', 'Action' und 'To'.

So vermute ich, dass, da der Client-Anwendung Endpunkt die Firewall-IP-Adresse und Port gibt, und den Dienst mit seiner internen Netzwerk-Adresse antwortet, die von der Firewall IP unterscheiden, dann WS-Addressing feuern die obige Meldung. Was ich denke, es ist eine sehr gute Sicherheitsmaßnahme, aber es ist nicht sehr nützlich in meinem Szenario.

WS-Addressing-Standard Vorlage Zitiert ( http://www.w3.org/ Submission / WS-Addressing / )

  

"Durch die Palette von Netzwerk-Technologien, die derzeit in breiten Umfang auf   (Zum Beispiel NAT, DHCP, Firewalls), können viele Implementierungen zuzuweisen kein   sinnvolle globale URI zu einem bestimmten Endpunkt. Damit diese ‚anonym‘   Endpunkte Nachrichtenaustauschmuster und empfangen Antworten zu initiieren,   WS-Adressierung definiert folgenden wird die bekannte URI für die Verwendung durch   Endpunkte, die einen stabilen, auflösbaren URI nicht haben können.    http://schemas.xmlsoap.org/ws/2004/08/ Adressierung / Rolle / anonym "

‚To‘ WS-Addressing-Tag in der SOAP-Message-Header

Wie kann ich konfigurieren meine wsHttpBinding Endpoint meine Firewall IP-Adresse und zu ignorieren oder zu umgehen, um die Adresse in der angegebenen? Oder muss ich etwas in Endpunktkonfiguration meinen Dienst ändern?

Hilfe und Beratung wird sehr geschätzt werden.

Marko.

P. S .: Während ich jede Lösung dieses Problems zu finden, ich bin mit Basichttpbinding mit absolut kein Problem natürlich.

War es hilfreich?

Lösung

Sie könnten versuchen, Ihre Service-Klasse Dekoration mit:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

Andere Tipps

Ein sicherer Weg, dies zu handhaben ist, den Endpunkt nuri den Dienst Url, und die Endpunkt-Adresse an den externen Endpunkt zu setzen, wo Kunden-Nachrichten senden. Auf diese Weise die Service „Trusts“ Nachrichten richtet sich nur an diese Adresse, nicht nur jede gewünschte Adresse.

Ich weiß nicht, über die Lösung von Mitch Baker, es nie versucht. Aber dies beinhaltet den generierten Code zu modifizieren. Es gibt einen anderen Weg, um das zu bekommen.

Ich gehe davon aus, dass Sie Client-Code mit svcutil.exe erzeugt, eine MEX-Adresse geben, die an die Firewall verweist. Wenn Sie dies tun, die ganze Konfiguration benötigt wird, um die App.config (oder Web.config) zugegeben. die Adresse des Service in der Konfiguration der realen Service-Adresse (wie in der WSDL-Datei die Adresse der Service-Schweller den realen Service Adresse sein) Punkt wird jedoch.

Also, was ich denke, wird dieses Problem lösen:

  1. generieren Client-Code durch die MEX-Adresse geben (zB: http: //: Port-X / service / wcfservice.svc Wsdl?). Dies wird erzeugt alle benötigten Konfiguration.

  2. Wenn der Client-Konstruktor aufgerufen wird, geben Sie den URI des Firewall als EnpointAddress und die Konfigurationsnamen der erzeugten Konfiguration. Auf diese Weise wird der Client eine Nachricht senden, als ob es sie an den Dienst zu senden, sondern an den Firewall-Adresse:

    client = new ServiceClient (endpointConfigName, neuer System.ServiceModel.EndpointAddress ( "http: //: Port-X / service / wcfservice.svc"));

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top