WCF - IMetadataExchange konnte nicht gefunden werden in der Liste der Verträge durch den Dienst implementiert
I ' V versucht zu konfigurieren, mein WCF-Dienst verfügbar machen beiden SOAP-und Json-endpoints. Aber damit scheine ich gebrochen mein MEX-Endpunkt mit dem Fehler:
System.InvalidOperationException: Der Vertrag name 'IMetadataExchange' konnte nicht gefunden werden in der Liste der Verträge durch den Dienst implementiert TestService. Fügen Sie ein ServiceMetadataBehavior, um die Konfiguration Datei oder das ServiceHost-Objekt direkt zu aktivieren der Unterstützung für diesen Vertrag.
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name ="soapBinding">
<security mode="None"/>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webBinding"/>
</webHttpBinding>
<mexHttpBinding>
<binding name="mexBinding"/>
</mexHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="poxBehavior">
<webHttp/>
</behavior>
<behavior name="jsonBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="defaultBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="TVD_WCF_Services.TestService" behaviorConfiguration="defaultBehavior">
<host>
<baseAddresses>
<!-- note, choose an available port-->
<add baseAddress="http://localhost:8732/Design_Time_Addresses/TVD_WCF_Services/TestService/" />
</baseAddresses>
</host>
<endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding" contract="TVD_WCF_Services.ITestService" />
<endpoint address="pox" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="poxBehavior" contract="TVD_WCF_Services.ITestService" />
<endpoint address="json" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior" contract="TVD_WCF_Services.ITestService" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="mexBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
Ich bin sicher, es ist etwas falsch mit der config, aber für das Leben von mir ich kann nicht herausfinden, was es ist. Beachten Sie, dass ich nicht geändert haben alles andere als die App.config so weit, so ich bin sicher das problem liegt.
Ich habe verschiedene andere Fragen im Zusammenhang mit diesem auf die Seite, aber ohne Erfolg.
Einen WCF-gurus da draußen, die helfen können?
InformationsquelleAutor Simon | 2012-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein Problem mit SOAP, Xml und Json-endpoints definiert, die zusammen auf einem einzigen Dienst .NET 4.0 framework.
Einfach entfernen Sie entweder die Xml-oder Json-Endpunkt, und es sollte ohne Probleme funktionieren. Wenn Sie möchten, dass beide arbeiten, können Sie es so einrichten .NET 3.5, wo es funktionieren würde, ohne jedes problem.
Ich habe mir den source-code für den Rahmen und es ist ein Unterschied, der dieses Problem verursacht.
Finden Sie die link auf die Microsoft connect, wo ich angesprochen haben, dies als einen Fehler. Bitte abstimmen, so dass MS nimmt es und behebt das Problem in einer späteren Version.
Sie müssen atleast ein Endpunkt definiert zusammen mit mex-Endpunkt.
Nicht sicher, warum, aber das entfernen poxBehaviour und defaultBehaviour und die Pocken Endpunkt haben. Cheers.
Leider ist der Microsoft-link ist jetzt gebrochen.
InformationsquelleAutor Rajesh
Versuchen Sie dies:
Ich glaube, der Vertrag Attribut muss den vollständig qualifizierten Namen eingeben.
Ich bin immer das gleiche Problem, ich habe versucht die beiden Lösungen aufgeführt, und weder gearbeitet, einschließlich der vollständig qualifizierte name der MetadataExchange-Schnittstelle.
All das WCF scheint sehr inkonsistent Verhalten. Wenn Sie voll qualifizieren, die IMetadataExchange die Ausnahme Nachricht ändert sich in "Vertrag name .... konnte nicht gefunden werden in der Liste der Verträge der service-Implementierung". Wenn Sie nur IMetadataExchange dann sagt er es nicht finden konnte, IMetadataExchange.
InformationsquelleAutor Sixto Saez
Sixto
Stellen Sie sicher, dass das Projekt, das Sie haben, die app.config/web.config eine Referenz auf System.ServiceModel
Grüße
GregJF
InformationsquelleAutor GregJF