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

Schreibe einen Kommentar