Wie kann ich die WCF-Dienstekonfig für HTTP und HTTPS in einer web.config kombinieren?
Ich verbrachte eine Menge Zeit, herauszufinden, wie zu konfigurieren, mein WCF-services, so dass Sie für https in der Produktionsumgebung.
Im Grunde genommen, die ich brauchte, um dies zu tun:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
Hinzufügen der bindingNamespace
Attribut der Endpunkt ist die Letzte Sache, die es zu arbeiten.
Aber diese config funktioniert nicht in meinem lokalen dev-Umgebung wo ich arbeite unter der normalen http. Also meine config ist dort:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
Die Unterschiede hier sind, ich habe den httpsGetEnabled
- Attribut auf false ein, und ich entfernte die bindingConfiguration und bindingNamespace.
Das problem ist: wie erstelle ich eine config-block, die BEIDEN Griffe?
Ich hasse es, dass Sie viele spezielle Modifikationen an der config jedes mal, wenn ich eine Freigabe. Ja, ich weiß, ich könnte einen post-build-task, die automatisch ändert die Werte, aber ich würde gerne Zusammenführen von den configs, wenn möglich.
Habe ich versucht, etwas wie dieses:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
<service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.IMyService"/>
<endpoint address="" bindingNamespace="https://secure.mydomain.com" binding="basicHttpBinding" bindingConfiguration="HttpsBinding" contract="MyNamespace.IMyService"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="HttpsBinding">
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
Ich dachte, dass die Inbetriebnahme der beiden Endpunkte geben würde, es zwei Optionen zu suchen, wenn die Aktivierung des Dienstes. Aber so funktioniert das nicht. Ich bekomme diese Fehlermeldung:
Konnte nicht finden, eine Basisadresse entspricht Schema https für den Endpunkt mit BasicHttpBinding Bindung. Eingetragene Basisadresse Systeme sind [http].
Suchen um SO und den rest des Internets, scheint es, dass andere Probleme gehabt haben slaying der Drache.
InformationsquelleAutor der Frage sohtimsso1970 | 2010-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ein problem mit Ihrem kombiniert config ist, dass Ihre beiden Endpunkte sind auf die gleiche Adresse - das wird nicht funktionieren.
Wenn Sie in IIS gehostet wird, dann ist dein server, das virtuelle Verzeichnis und die *.svc-Datei benötigt wird, bestimmen Sie Ihre basic-Adresse - es wird etwas sein wie:
Wenn Sie wollen, haben zwei Endpunkte, mindestens eine von Ihnen muss definieren, die eine relative Adresse:
In diesem Fall hätten Sie Ihre HTTP-Endpunkt auf:
und Ihre sichere HTTPS-Endpunkt auf:
Außerdem: Ihre sichere Endpunkt verwendet
HttpsBinding
Konfiguration - aber du bist fehlt eine solche Bindung Konfiguration - alles, was Sie haben, ist:Müssen Sie den
HttpsBinding
Konfiguration!!InformationsquelleAutor der Antwort marc_s
Ist das Problem nicht mit der config-Datei, aber mit dem IIS-setup.
Sie benötigen zum aktivieren von HTTP - & HTTPS in IIS.
In IIS 7.5, gehen Sie zu Ihrer Website und klicken Sie auf Bindungen unter Site Bearbeiten, in Aktion. Sicherstellen, dass sowohl die http - & https Hinzugefügt wurden.
Dann müssen Sie ein binding für HTTP-unter
<basicHttpBinding>
mit security mode auf none gesetzt.Fügen Sie den neu erstellten binding-Konfiguration http-Endpunkt.
Sie sind gut zu gehen. Lassen Sie mich wissen, wenn Sie weitere Frage.
InformationsquelleAutor der Antwort mohit bansal