Ich habe eine Webanwendung erstellt, die einen WCF-Servicevertrag und ein Silverlight-Steuerelement enthält, mit dem dieser WCF-Service aufgerufen wird. Auf meinen Entwicklungs- und Testservern funktioniert es hervorragend.
Wenn ich auf unserem Live-Server bereitstelle und die Anwendung ausführe, erhalte ich eine Ausnahme vom Typ, System.ServiceModel.ServiceActivationException
die besagt, dass der Dienst aufgrund einer Ausnahme während der Kompilierung nicht aktiviert werden kann. Die Ausnahme ist:
Diese Sammlung enthält bereits eine Adresse mit dem Schema http. Diese Sammlung kann höchstens eine Adresse pro Schema enthalten.
Ich habe gelesen, dass diese Ausnahme ausgelöst werden kann, wenn die Website mehr als einen Host-Header enthält, was auf unserem Live-Server der Fall ist. Anscheinend können in IIS gehostete WCF-Dienste nur eine Basisadresse haben. Wie kann ich dieses Problem umgehen?
Zusammenfassung,
Codelösung: Hier
Konfigurationslösungen: Hier
Mit Hilfe von Mike Chaliy habe ich einige Lösungen gefunden, wie dies durch Code gemacht werden kann. Da dieses Problem so gut wie alle Projekte betrifft, die wir in einer Live-Umgebung bereitstellen, habe ich mich für eine reine Konfigurationslösung entschieden. Ich habe schließlich eine gefunden, die ausführlich beschreibt, wie es in .net 3.0 und .net 3.5 geht.
Im Folgenden finden Sie ein Beispiel für die Änderung der Webkonfiguration Ihrer Anwendungen:
DNS-Lösung (nicht getestet): Ich denke, wenn Sie einen neuen DNS-Eintrag speziell für Ihre Webanwendung erstellen, eine neue Website hinzufügen und ihm einen einzelnen Host-Header geben würden, der dem DNS-Eintrag entspricht, würden Sie dieses Problem insgesamt mindern und nicht Sie müssen benutzerdefinierten Code schreiben oder Ihrer web.config-Datei Präfixe hinzufügen.
quelle
Haben Sie das gesehen - http://kb.discountasp.net/KB/a799/error-accessing-wcf-service-this-collection-already.aspx
quelle
In meinem Fall waren die Hauptursache für dieses Problem mehrere http-Bindungen, die auf der übergeordneten Website definiert wurden, z. B. InetMgr-> Sites-> Mysite-> properties-> EditBindings. Ich habe eine http-Bindung gelöscht, die nicht erforderlich war, und das Problem wurde behoben.
quelle
In meinem Fall war es ganz einfach: Ich habe den Assistenten zum Hinzufügen eines WCF-Dienstes in Visual Studio verwendet, der automatisch entsprechende Abschnitte in app.config erstellt hat. Dann las ich weiter : Gewusst wie: Hosten eines WCF-Dienstes in einer verwalteten Anwendung . Das Problem war: Ich musste die URL nicht angeben, um den Webdienst auszuführen.
Ersetzen:
Mit:
Und der Fehler ist weg.
Generisches Idee: Wenn Sie die Basisadresse als param bieten und sie in Config angeben, können Sie diesen Fehler. Höchstwahrscheinlich ist das nicht der einzige Weg, um den Fehler zu bekommen, du.
quelle
Ich hatte dieses Problem und die Ursache war ziemlich dumm. Ich habe die Microsoft-Demo zum Ausführen eines ServiceHost in einer ausführbaren Befehlszeilendatei ausprobiert. Ich habe die Anweisungen befolgt, einschließlich der Stelle, an der der entsprechende Dienst (und die entsprechende Schnittstelle) hinzugefügt werden sollen. Aber ich habe den obigen Fehler bekommen.
Es stellte sich heraus, dass VS beim Hinzufügen der Serviceklasse die Konfiguration automatisch zur app.config hinzugefügt hat. Und die Demo versuchte auch, diese Informationen hinzuzufügen. Da es bereits in der Konfiguration war, habe ich den Demo-Teil entfernt und es hat funktioniert.
quelle
Ich habe den gleichen Fehler auf einem alten 2010 Exchange Server festgestellt. Ein Dienst (Exchange-Postfachreplikationsdienst) hat den oben genannten Fehler ausgegeben, und der Migrationsprozess konnte nicht fortgesetzt werden. Beim Durchsuchen des Internets kam ich über diesen Link , der Folgendes angab:
Der Exchange GRE kann bei der erstmaligen Installation oder bei Änderungen am IIS-Server nicht geöffnet werden. Es schlägt mit einem Snap-In-Fehler fehl. Wenn Sie versuchen, die Snap-In-Seite zu öffnen, wird der folgende Inhalt angezeigt:
Ursache : Dieser Fehler tritt auf, weil der http-Port Nummer 443 bereits von einer anderen Anwendung verwendet wird und der IIS-Server nicht für die Verarbeitung mehrerer Bindungen an denselben Port konfiguriert ist.
Lösung : Konfigurieren Sie den IIS-Server für die Verarbeitung mehrerer Portbindungen. Wenden Sie sich an den Hersteller (Microsoft), um es zu konfigurieren.
Da diese Dienste von einem IIS-Webserver angeboten wurden, wurde das Problem durch Überprüfen der Bindungen auf der Stammwebsite behoben. Jemand hatte die Site-Bindungen durcheinander gebracht, Regeln definiert, die sich überlappten, und die Dienste durcheinander gebracht.
Das Beheben der richtigen Bindungen löste das Problem in meinem Fall und ich musste die Web.Config nicht konfigurieren.
quelle