WCF Webservice hinter der öffentlichen reverse-proxy
Wie kann ich richtig dienen WSDL des WCF-webservice befindet sich in einem privaten LAN hinter einem reverse-proxy lauscht auf öffentliche IP-Adresse?
Ich habe einen Apache-webserver konfiguriert, die in reverse-proxy-Modus, wartet auf Anfragen auf die öffentliche IP-Adresse und serviert Sie aus der internen IIS-host. WCF webservice generiert WSDL-Datei mit der FQDN-Adresse des LAN-Hosts, die natürlich nicht gelesen werden können, durch eine internet-web-service-client.
Gibt es irgendeine Einstellung, die konfiguriert werden können, in der wcf-Anwendung web.config oder im IIS, um die Anpassung der WSDL erzeugt, mit host-Adresse und der öffentlichen Adresse statt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrer service-Klasse das Attribut hinzufügen:
Dies ermöglicht es der service angesprochen werden, die der AUFTRAGGEBER https://... aber der service gehostet wird, auf http://..... Sehen diese Antwort zu erstellen, wie für eine Erweiterung zu ermöglichen AddressFilterMode.Alle angegeben werden durch Konfiguration, ohne dass code-Attribute.
Im web.config des service-host, die endpoint-element muss eine absolute URL in der Adresse-Attribut, das ist die öffentliche URL, die der client verwendet. In der gleichen endpoint-element listenUri-Attribut, um die absolute URL, auf der der service-host überwacht wird. Die Art, wie ich bestimmen, was der Standard absolute URI host überwacht wird, ist eine service Referenz im client-Anwendung, welche Punkte der physischen server, auf dem der service gehostet wird. Die web -.in der config von dem client eine Adresse für den Dienst. Dann kopiere ich das in die listenUri-Attribut in der web-hosts.config.
In Ihrem service-Verhalten Konfiguration fügen Sie das element serviceMetaData mit dem Attribut httpGetEnabled=true
So müssen Sie etwas wie:
Ich bin nicht sicher, ob das funktioniert mit message-Sicherheit oder Sicherheit für den transport. Für diese spezielle Anwendung, die Anmeldeinformationen, die übergeben wurden, als Teil des DataContract-so hatten wir "basicHttpBinding" security mode = none. Da der transport ist sicher (ssl-load-balancer) gab es keine Sicherheitsprobleme.
Ist es auch möglich zu verlassen listenUri-Attribut leer, aber es muss vorhanden sein.
Leider gibt es einen bug in der WCF, wo die Basis-Adresse des importierten schemas in WSDL haben listenUri Basis-Adresse, anstatt die öffentlichen Basis-Adresse konfiguriert, verwenden Sie die-Adresse-Attribut des Endpunkts). Arbeiten rund um dieses Thema, müssen Sie erstellen ein IWsdlExportExtension Umsetzung was bringt der importierten schemas in WSDL-Dokument direkt und entfernt die Importe. Ein Beispiel dafür ist hier http://winterdom.com/2006/10/inlinexsdinwsdlwithwcf. Zudem können Sie die Beispiel-Klasse Erben von BehaviorExtensionElement und die zwei neue Methoden:
Dies wird Ihnen ermöglichen, um eine Erweiterung hinzuzufügen Verhalten in der .config-Datei und fügen Sie das Verhalten mithilfe von configuration anstatt zum erstellen einer service-Fabrik.
unter dem system.servicemodel-element Konfiguration hinzufügen:
Und dann auf den neuen Endpunkt Verhalten in Ihren endpoint-Konfiguration mit der Einstellung behaviorconfiguration Attribut
Ich habe ähnliche Probleme, einer davon war die Auflösung der öffentlichen und server-Adressen. Dies löste das Problem, obwohl ich immer noch ein paar Probleme bei der Authentifizierung.
http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx
Aussehen http://msdn.microsoft.com/msdnmag/issues/07/06/ServiceStation/.