Was ich versuche, ist, einen SINGLE WCF-Dienst zu bekommen, der in der Entwicklungsumgebung arbeitet, die das HTTP-Schema ist, und auch, dass der SAME-Dienst in der Produktionsumgebung arbeitet, die das HTTPS-Schema ist. Wenn ich die zwei Https-Endpunkte entferne (die mit dem Suffix "Https"), funktioniert es in der Entwicklungsumgebung; Ebenso, wenn ich nur die beiden Http-Endpunkte entferne, funktioniert es in der Produktionsumgebung. Ich hätte gerne alle vier Endpunkte in der web.config, wenn möglich.
Meine Endpunkte sind wie folgt definiert:
%Vor%Bearbeitet: Ich bearbeite meine Frage, um den Fehler hinzuzufügen, den ich erhalte, und die verbindlichen Abschnitte (unten). Entschuldigung für die neue Länge der Frage.
Der Fehler ist: "Es konnte keine Basisadresse gefunden werden, die mit dem Schema http für den Endpunkt mit bindendem WebHttpBinding übereinstimmt. Registrierte Basisadressenschemas sind [https]."
Außerdem ist die Produktionsumgebung auf "SSL erforderlich" eingestellt. Das kann sich nicht ändern.
Die Bindungskonfigurationen sind:
%Vor%Irgendwelche Ideen?
Befolgen Sie diese Schritte -
1) Schreiben Sie zwei Endpunkte für den Dienst, einen für http und einen anderen für https.
%Vor%2) Aktivieren Sie sowohl httpGetEnabled="True" httpsGetEnabled="true" in serviceBehaviors.
%Vor%3) Schreiben Sie zwei Bindungskonfigurationen für http und https. Für http geben Sie security mode="None" und für https geben Sie mode="Transport".
%Vor%Überprüfen Sie diesen Link
Wenn Sie Visual Studio 2010 und Web Application Project Deployment verwenden, können Sie mithilfe der Transformations-Syntax Web.config die bindingConfiguration Ihres Service-Endpunkts auf eine HTTPS-aktivierte Bindungskonfiguration verweisen.
Ich fand heraus, dass ich nur zwei Elemente in der Datei Web.config ersetzen musste. Das bindingConfiguration-Attribut des Endpunkts und httpsGetEnabled von serviceMetadata sollten auf "true" gesetzt werden.
Hier ist die Web.config in ihrer Standardkonfiguration (debug):
%Vor%Hier ist die Web.Release.config-Transformationsdatei
%Vor%Hier sehen meine Bindungen aus, aber sie sind ziemlich Standard. Beachten Sie die Namen, die oben verwendet werden:
%Vor%Hier finden Sie einen Link zu weiteren Web.config-Transformationen:
Das standardmäßige Empfangszeitlimit beträgt 10 Minuten. Daher wird der WCF-Client getrennt, nachdem die Leerlaufzeit diese Begrenzung überschritten hat. Was kann ich tun, wenn die Verbindung am Leben erhalten werden soll?
Lösung # 1:
Der Server stellt eine Dummy-Operation für Client-Aufrufe bereit, damit er nicht im Leerlauf läuft.
Lösung # 2:
Aktivieren Sie reliableSession und setzen Sie receiveTimeout und inactivityTimeout sowohl auf dem Client als auch auf dem Server auf "unendlich". Das Konfigurations-Snippet könnte wie folgt aussehen:
%Vor%Es gibt viele Gründe, warum Sie den Fehler erhalten können:
%Vor%Die meisten Gründe stammen aus den Einstellungen von Web.config, aber möglicherweise von IIS. Ich hatte die gleichen Probleme, wenn Sie Endpunkte mit HTTP und HTTPS Bindungen verteidigt haben, müssen Sie http und HTTPS Bindung für die Website erstellen, die Sie in IIS- & gt; Site- & gt; -Bindungen erstellt haben, andernfalls erhalten Sie diesen Fehler.
Dies ist ein Grund, warum Sie eine Bindung über die Konfiguration einrichten können: Um verschiedene Einstellungen in verschiedenen Umgebungen verwenden zu können.
Die einfachste Lösung für Sie ist es, makecert zu erstellen Testzertifikat für Ihre Entwicklungsumgebung und verwenden Sie HTTPS sowohl auf der Entwicklungs- als auch auf der Produktionsmaschine.
Eine weitere Lösung besteht darin, ein Installationspaket (msi) zu erstellen und admin während der Installation die Enpoint-Einstellungen ändern zu lassen.
Bearbeiten:
Ihre Anforderung, alle vier Endpunkte auf beiden Computern zu haben, ist erreichbar, aber in diesem Fall wird Ihr Dienst auch in der Produktion über HTTP verfügbar gemacht, und jeder, der über WSDL für den Dienst verfügt, wird darüber Bescheid wissen.
Tags und Links wcf .net web-services endpoints