How-to: Umzug WCF-service von localhost auf server-Produktion
Arbeitete ich durch erstellen eines WCF-Webdiensts auf meiner Entwicklungs-Maschine. Ich baute den Dienst, erstellt einen test-client, alles getestet und es funktioniert. Ich begann zu fühlen, ziemlich gut über das WCF-Sachen. Dann habe ich gutsy und zog es zu meinem Produktionsserver.
Für jetzt, die Produktions-server auf WinHost.com. Ich habe mein Test-domain, www.MyDomain.com erstellt eine Anwendung, die Ordner /websvc, und kopiert die web-service-Dateien in es. Die service-Adresse ist http://www.MyDomain.com/websvc/eval.svc
Nun habe ich bewegt, um die Produktions-server kann ich nicht verwenden Sie die web-service. Ich bekomme diese Fehlermeldung - "Diese Sammlung enthält bereits eine Adresse mit Schema" http." Ich gegoogelt die Nachricht nach Lösungen, versucht, ein paar aber nur führte zu weiteren Fehlern. Also ich setze alles zurück und ich fange an über.
Basiert auf dem service-Adresse vor, was sollte mein web.config Aussehen? Insbesondere, wie sollte meine Endpunkte in ihn sehen?
Hier ist, was ich jetzt haben...
<configuration>
<system.serviceModel>
<services>
<service name="EvalServiceLibrary.EvalService">
<endpoint address="http://www.MyDomain.com:80/websvc/mex"
binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="http://www.MyDomain.com:80/websvc/basic"
binding="basicHttpBinding" contract="EvalServiceLibrary.IEvalService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
- Ist, dass eine Nachricht, die Sie erhalten, wenn Sie versuchen, zu konsumieren, den Dienst aus einer Anwendung? Aktivieren
includeExceptionDetailInFaults
und navigieren Sie dann zu dem Speicherort, der den service in Ihrem browser. Was zeigen Sie? Übrigens, die Adresse finden Sie aufgelistet in Ihrer Frage nicht mit der Endpunkt-Adresse im Web.config-Datei. - Können Sie den Unterschied in der Endpunkt-Adresse? Ich bin nicht es zu sehen. Die Fehlermeldung ist disaplyaed in meinem browser, wenn ich Versuch zu access MyDomain.com:80/websvc/eval.svc/basic
- Die Adresse in der Beschreibung ist
websvc/eval.svc
, in der Erwägung, dass in der config heißt esbasic
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedes mal, wenn ich in dieser, es ist, weil der IIS-Konfiguration für mehrere virtuelle hosts mit Namen (eine gemeinsame config in hosted Szenarien). Hier ist ein guter Weg, um es zu beheben, die immer für mich gearbeitet - beachten Sie, dass Sie müssen explizit und genau zu definieren, Ihre Endpunkt-Adressen, einschließlich der korrekte hostname (es sieht aus wie Sie mehr oder weniger haben).
Habe ich eingereicht verbinden bugs zu umgehen, und es ist angeblich besser für 4.0, aber ich habe nicht versucht es noch nicht.
Web service ist jetzt arbeiten und gehostet auf einem Drittanbieter-Dienst wie oben beschrieben. Die web -.config verwendet wird, ist inlcuded unten.
Lektion gelernt: Schreiben von code zum WCF web services ist nicht schwierig, aber die Konfiguration der Endpunkte kann ein bisschen eine Herausforderung.
ist es nur bedeuten, dass, wenn Sie das hosting des service im IIS gibt es keine Notwendigkeit, geben Sie die Basis-Adresse. Es ist bereits definiert durch das virtuelle IIS-Verzeichnis. Ersetzen Sie einfach den block mit diesem: