WCF gehostet in einer Web-Anwendung und Kompatibilität Modus
Habe ich einen WCF-Dienst gehostet wird, in einer web-Anwendung (IIS). Ich müssen zu aufzudecken 1 Endpunkt über wsHttp
und die andere über netTcp
. Ich bin auf einem IIS7-Umgebung, die es möglich macht, für mich hosten nicht-HTTP-basierte Dienste. Sowieso, wenn ich durchsuchen die .svc
Datei mit einem browser, bekomme ich die Fehlermeldung:
Den service kann nicht aktiviert werden, weil es nicht unterstützt ASP.NET
die Kompatibilität. ASP.NET Kompatibilität aktiviert ist für diese Anwendung
Durch googeln erkannte ich, dass WCF läuft in zwei Modi Mixed und ASP.NET -kompatibel. Wenn ich das Attribut
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Jedoch scheint es, dass, sobald ich weisen Sie dieses Attribut der Service-Vertrag-Umsetzung, die ich nicht verwenden können, eine nicht-HTTP-Bindung.
Wie kann ich es so einrichten dass:
- Ich kann die Unterstützung von nicht-HTTP-Endpunkte
- Ich kann als host für den service über eine Web-app
- Ich nicht, erstellen Sie mehrere Dienste mit aspnet-Kompatibilität eingeschaltet und der andere ausgeschaltet
Noch nicht so weit (Nicht sicher, Ob ich es verwenden würde-Sitzung oder Kontext in der Zukunft). Sind Sie sagen, dass, wenn ich nicht mit jedem asp.net feature, ich sollte in der Lage sein, schalten Sie das AspNetCompatibility und noch host in ein web-host?
warum nicht, setzen Sie den Dienst mit einem windows-Dienst? Ich denke, dass die erste und zweite sind völlig unmöglich, es sei denn, Sie verwenden WAR.
Ich Frage mich, wie Sie es in der StockTrader Beispiel-app. Ich glaube, dass Sie die Unterstützung von HTTP-und nonHTTP Bindungen für die gehosteten Dienste über eine Web-app (nicht WAR)
Ok, ich gehosteten WCF-Dienst auf Appfabric. Ich kann immer noch nicht schalten Sie das AspNetCompatibilityRequirements
InformationsquelleAutor DotnetDude | 2010-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ziemlich viel Los hier. Zuerst von allen, es sei denn, du bist tatsächlich mit einem ASP.net feature speziell, sollten Sie NICHT verwenden Kompatibilitäts-Modus. Um diese Funktion deaktivieren, Folgen Sie Kirk ' s Vorschlag, und auch entfernen Sie diese Zeile aus dem code:
Kompatibilitätsmodus ist nicht erforderlich, einfach-zu-host einen HTTP-Dienst, es ist nur, wenn Sie verwenden möchten ASP.net Funktionen, die nicht in WCF (oder brauchen zu port bis eine ältere asmx-service, WCF ohne änderung anderer code).
Das zweite problem ist das hosting einer nicht-HTTP-Bindung, mit IIS. Das funktioniert nur in IIS 7 und nur mit WAR. ASP.net Kompatibilität wird NICHT funktionieren mit einem nicht-HTTP-Bindung, weil ASP.net erfordert HTTP.
Also, was Sie versuchen zu tun, ist unmöglich, so lange Kompatibilitäts-Modus aktiviert ist. Entfernen Sie es, und dann die Dinge funktionieren sollte.
InformationsquelleAutor Tridus
Vermutung, Sie haben eine ASP.NET Kompatibilität-Einstellung aktiviert, für die IIS-Anwendung. Dieser link scheint verwandt zu sein.
Ich würde vorschlagen, Sie auszuschalten ASP.NET Kompatibilität-Modus. Ich habe laufen net.tcp-und basicHttp endpoints von der gleichen Anwendung in IIS ohne Probleme.
edit: Dies ist die Konfiguration ändern, die Sie brauchen, um machen /überprüfen (aus dem link). Der Wert sollte geändert werden von 'false' auf 'true'.
In deinem ursprünglichen Beitrag, Sie sprechen über das hinzufügen eines Attributs zu dem Dienst, der bestimmt, ob oder nicht der Dienst ausgeführt werden kann, in AspCompatibilityMode. Ich spreche über die Konfiguration der Anwendung in Ihrem web-config -, so dass die Anwendung nicht AspCompatibilityMode bei allen (und das Attribut überflüssig). Meine Antwort bearbeitet wurde.
InformationsquelleAutor Kirk Broadhurst
Bitte versuchen Sie multipleSiteBindingsEnabled, um wahr zu sein in der ServiceHostingEnvironment. Ich bin kein Experte in der WCF-aber nachdem ich die Frage und lese ein paar Seiten, die ich denke, es würde Sinn machen, da Sie über TCP-und HTTP-service-Endpunkte.
Hoffe, das hilft.
InformationsquelleAutor Raja
Dass ich auf diese Frage sowie.
es ergab sich aus der Migration einige neue code ,referenziert das System.Web-namespace, aber nicht wirklich erforderlich ist es, in eine bestehende WCF-Projekt.
entfernen diejenigen, die sich mit Aussagen gelöst das Problem für mich.
Ich erwartet zu haben, um track down code, der erforderlich ist, dass die namespace-aber hatte Glück.
InformationsquelleAutor wode