3 Stimmen

Wo können Metadaten aktiviert werden (wird in der Konfiguration aktiviert)?

Ich habe einen einfachen WCF-Dienst, und wenn ich zum WCF-Testclient gehe, um ihn zu testen, erhalte ich eine Fehlermeldung, die besagt, dass Metadaten nicht gefunden werden konnten, bitte fügen Sie sie hinzu usw. Leider ist der MSDN-Link im Fehler-Popup defekt und in der app.config meines WCF-Dienstes sind Metadaten aktiviert:

  <serviceBehaviors>
    <behavior name="TelerikWcfServices.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>

Ansonsten habe ich keine anderen Metadateneinstellungen in meinem Code geändert.

Wo kann ich Metadaten aktivieren, um den Fehler zu beheben?

3voto

Andrew Hare Punkte 332190

Sie müssen einen Metadatenaustausch-Endpunkt (MEX) zu Ihrem Dienstknoten hinzufügen. Versuchen Sie etwas wie dies:

<endpoint 
    address="http://host/svc/mex" 
    binding="mexHttpBinding" 
    bindingConfiguration=""
    contract="IMetadataExchange"/>

0 Stimmen

Aber das ändert dann den gesamten Endpunkt? Ich nehme an, ich kann nicht beides verwenden? Was tue ich also, wenn ich eine der anderen Bindungen benötige?

0 Stimmen

Ich habe versucht, diesen Endpunkt zu meinem Dienstknoten hinzuzufügen, aber es heißt immer noch: "Das HTML-Dokument enthält keine Webdienst-Ermittlungsinformationen".

0 Stimmen

Funktioniert das wirklich ohne Einstellung <serviceMetadata httpGetEnabled="True"/> ? Bei mir funktioniert es nicht.

1voto

Peter Bondy Punkte 11

Wenn Sie Workflow 4.0 mit WorkflowServiceHost verwenden und Ihren Dienst von einer xamlx-Ressource laden, wird ein WCF serviceBehavior-Tag mit einem Namen nicht erkannt. Ich weiß nicht, warum (scheint mir ein Bug zu sein). Zum Beispiel, dieses Tag von oben:

<serviceBehaviors>
    <behavior name="TelerikWcfServices.Service1Behavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>

müsste das Attribut name auf diese Weise eliminiert werden:

<serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>

und das Dienstelement würde den Verweis auf den Namen der Verhaltenskonfiguration wie in

<service 
    name="TelerikWcfServices.IScheduler">
    <endpoint address="http://localhost/Telerik" binding="basicHttpBinding"
      bindingConfiguration="" name="Telerik"      contract="TelerikWcfServices.IScheduler">...

0voto

GurdeepS Punkte 61489

Ich habe meine eigene Frage beantwortet, da dies die einzige einfache Möglichkeit ist, die gesamte Datei anzuzeigen:

<client>
  <endpoint address="http://localhost/Telerik" binding="basicHttpBinding"
    bindingConfiguration="" contract="TelerikWcfServices.IScheduler"
    name="Telerik">
    <identity>
      <dns value="localhost" />
      <certificateReference storeName="My" storeLocation="LocalMachine"
        x509FindType="FindBySubjectDistinguishedName" />
    </identity>
  </endpoint>
</client>
<diagnostics>
  <messageLogging logEntireMessage="true" />
</diagnostics>
<services>
  <service behaviorConfiguration="TelerikWcfServices.Service1Behavior"
    name="TelerikWcfServices.IScheduler">
    <endpoint address="http://localhost/Telerik" binding="basicHttpBinding"
      bindingConfiguration="" name="Telerik" contract="TelerikWcfServices.IScheduler">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/Design_Time_Addresses/TelerikWcfServices/Service1/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="TelerikWcfServices.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>

Vielen Dank für Ihre Hilfe!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X