Ich versuche, meine SVC-Datei unter IIS arbeiten zu lassen. In meinem Projekt, als ich F5 drücke, habe ich die SVC funktionstüchtig gemacht. Ich weiß also, dass alles in Ordnung ist, oder? Außer für IIS.WCF Wie aktiviert man Metadaten?
Ich arbeite an einem Windows XP Pro Computer und in IIS habe ich ein virtuelles Verzeichnis hinzugefügt.
Hier ist mein Code: IcarePlanActions (Projekt: A)
namespace WcfServiceLibrary
{
[ServiceContract]
public interface ICarePlanActions
{
[OperationContract]
List<string> GetAllClients();
}
}
Auftraggeber: (Projekt: A)
namespace WcfServiceLibrary
{
public class Client : ICarePlanActions
{
public List<string> GetAllClients()
{
List<string> clients = new List<string>();
clients.Add("Hendrik de Jong");
clients.Add("Miep de Berg");
clients.Add("Jaap Jongeneel");
clients.Add("Joop Prakman");
clients.Add("Pieter Schaakman");
return clients;
}
}
}
Web.config (Projekt: B)
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="CarePlanService.Service1Behavior"
name="WcfServiceLibrary.Client">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.ICarePlanActions">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarePlanService.Service1Behavior">
<!-- 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>
CarePlan.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Client" %>
Wenn ich laufen diesen Dienst (die auf IIS) mit wfctestclient Ich erhalte diese Fehler
Error: Cannot obtain Metadata from http://localhost/CarePlanService/CarePlan.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.
Was mache ich falsch?
SOLUTION
ich den Dienst nicht arbeiten unter IIS bekommen haben. Zuerst erstelle ich manuell ein virtuelles Verzeichnis und deutete auf die Datei, in der sich die SVC befindet. Das hat nicht funktioniert. Ich weiß nicht warum.
Dann ging ich zu Visual Studio und änderte die Servereinstellung (rechte Maustaste auf das Projekt, Eigenschaften, Registerkarte Web, klicken Sie auf Use local IIS Web Server
und klicken Create Virtual Directory
. Als ich das tat, es oben unter IIS mit dem Code gearbeitet.
Bearbeiteter Titel - das hat nichts mit der Programmiersprache C# zu tun. –
Ich habe WCF nicht so verwendet, aber sollten Sie Ihre Service-Implementierung in den Datenvertrag einfügen? und wenn ja, gibt es keinen im Vertrag definierten Datamember. Sieht mir komisch aus. Aber ich habe nie in IIS gehostet ... – magnus
@Martijn: wirklich dumme Frage: Wenn Sie versuchen, mit dem WcfTestClient verbinden, ist die Website up? Wenn Sie die hier vorgeschlagenen Änderungen vornehmen (löschen Sie [DataContract], verwenden Sie "mexHttpBinding" für den mex-Endpunkt), habe ich keine Probleme, die Metadaten überhaupt zu bekommen. Aber du musst zuerst einen "View in Browser" in der * .svc Datei machen, um den eingebauten Webserver zu starten - und dann kannst du dich mit deinem WcfTestClient mit der URL verbinden –