Ich habe viel Zeit damit verbracht, herauszufinden, wie meine WCF-Dienste konfiguriert werden, damit sie in der Produktionsumgebung für HTTPS funktionieren.Wie kann ich die WCF-Dienstkonfiguration für http und https in einer web.config kombinieren?
Im Grunde brauchte ich, 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 auf den Endpunkt der letzte Sache ist, dass es funktioniert hat.
Aber diese Konfiguration funktioniert nicht in meiner lokalen Dev-Umgebung, wo ich unter regelmäßigen http arbeiten. Also meine Config gibt es:
<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, dass ich das httpsGetEnabled
Attribut auf false gesetzt habe, und ich nahm die bindingConfiguration und bindingNamespace.
Das Problem ist: wie kann ich einen Konfigurationsblock erstellen, die beide Griffe?
Ich hasse wirklich jedes Mal, wenn ich Release tun, um viele spezielle Änderungen an der Konfiguration mit. Ja, ich weiß, dass ich eine Post-Build-Aufgabe haben könnte, die automatisch die Werte ändert, aber ich würde die Configs wenn möglich zusammenführen.
habe ich versucht, so 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 beide Endpunkte setzen würde es zwei Möglichkeiten zu suchen, wenn die Service-Aktivierung. Dies funktioniert jedoch nicht. Ich erhalte diesen Fehler:
Konnte keine Basisadresse finden, die mit dem Schema https für den Endpunkt mit der Bindung BasicHttpBinding übereinstimmt. Registrierte Basisadressenschemata sind [http].
Von umsah SO und dem Rest des Internets, scheint es, dass andere hatten Probleme mit diesen Drachen erschlagen.
Hosten Sie Ihren WCF-Dienst in IIS oder hosten Sie selbst? –
Sie werden als .svc-Dateien in einer ASP.NET-Webanwendung gehostet. Verwenden von IIS7 auf beiden Dev und Prod. – sohtimsso1970
@ sohtimsso1970: Haben Sie eine Lösung gefunden? – Learner