Ich versuche, einen WCF-Dienst über SSL auf IIS 6 über einen Load Balancer zu starten. Mein anfängliches Problem war offensichtlich und ziemlich gut besprochen - die Adresse, die auf der WSDL-Seite gezeigt wurde, zeigte auf https://SERVERNAME/WebServices/mydomainws.svc anstelle von www.mydomain.com. Die Antwort auf dieses Problem ist das Hinzufügen eines Hostheaderwerts in IIS. Ich habe das getan und es hat ... irgendwie funktioniert. Ich bekomme jetzt http: //www.mydomain.com/WebServices/mydomainws.svc beim Anzeigen der WSDL in einem Browser. Wenn ich auf diesen Link (den Nicht-ssl-Link) klicke, erhalte ich eine Service-Definition, die erneut auf den Servernamen verweist.WCF über IIS durch Load Balancer meldet falsche Basisadresse
Die nächste häufig empfohlene Abhilfe ist die Verwendung WCF Extras, die eine Erweiterung bietet, mit der Sie eine Basisadresse angeben können. Aber das Setzen dieses Konfigurationseintrags hat nur die soap12: -Adresse aktualisiert. Die EndPointReference-Adresse verwendet weiterhin den Computernamen.
Fassen wir zusammen: WSDL als bei https://www.mydomain.com/WebServices/mydomainws.svc in Webbrowser angezeigt: http: //www.mydomain.com/WebServices/mydomainws.scv
den Link oben Ein Klick bringt mich zu einer tatsächlichen WSDL-Datei mit der folgende Service-Eintrag:
https://ServerName/WebServices/mydomainws.svc
Mein Server-Konfigurationsdatei hat die folgenden Servicemodel-Einträge:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<message clientCredentialType="None"/>
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="mydomain.ws.mydomainws" behaviorConfiguration="mydomainwsBehavior">
<!-- Service Endpoints -->
<endpoint address="" **behaviorConfiguration="CorrectEndPoint"** binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="mydomain.ws.Imydomainws"/>
<endpoint address="mex" **behaviorConfiguration="CorrectEndPoint"** binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mydomainwsBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
**<behavior name="CorrectEndPoint">
<wsdlExtensions location="https://www.mydomain.com/WebServices/mydomainws.svc" singleFile="true"/>
</behavior>**
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<extensions>
<behaviorExtensions>
<add name="wsdlExtensions" type="WCFExtras.Wsdl.WsdlExtensionsConfig, WCFExtras, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
Kann jemand mich in die richtige Richtung?
Danke, George
Beachtenswert: das Problem ging weg, wenn ich von wsHttpBinding zu basicHttpBinding wechselte. Ich musste dies trotzdem tun, da mein Anrufer auf .net 2.0 ist und einen wsHttpBinding-Dienst nicht nutzen kann. Ich glaube, ich brauche immer noch den Verweis auf die Erweiterung WCF Extras. – GeorgeBarker