2009-05-18 15 views
5

He intentado varias veces que mi servicio WCF exponga MetaData. En lugar de ello, sigo manteniendo la excepción:WCF MetaData no funciona

El nombre de contrato 'IMetadataExchange' no se puede conocer en la lista de contratos ejecutados por el servicio SecurityBroker. Agregue un ServiceMetadataBehavior al archivo de configuración o al ServiceHost directamente para habilitar el soporte para este contrato.

... al navegar manualmente al servicio mediante IE.

(Estoy suponiendo que esto es la misma razón por la que mi aplicación cliente no es capaz de generar una referencia de servicio Los pasos del bebé y todas.)

Y sin embargo, mi web.config se ve bien:

<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
<behaviors> 
    <endpointBehaviors> 
     <behavior name="webHttpEnablingBehaviour"> 
      <webHttp /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="webHttpEnablingBehaviour"> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<services> 
    <service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker"> 
     <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" /> 
     <endpoint address="" 
      binding="webHttpBinding" 
      bindingConfiguration="default" 
      contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker" 
       behaviorConfiguration="webHttpEnablingBehaviour"> 
     </endpoint> 
    </service> 
</services> 
<client /> 
<bindings> 
    <webHttpBinding> 
     <binding name="default" /> 
    </webHttpBinding> 
</bindings> 
</system.serviceModel> 

Así que tengo mi IMetadataExchange contrato definido con mex bien, y enganchado, hasta donde puedo ver. ¿Me he perdido algo tonto?

Editar

Mi definición de servicio se muestra a continuación, si esto es útil:

<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %> 

Respuesta

9

su archivo de configuración tiene el atributo behaviorConfiguration en el elemento de "punto final", sino que también lo necesitan en el elemento "servicio".

+0

excelente, que tiene! Muchas gracias. –

2

Estoy usando NetTcpBinding para todos. En mi caso, yo estaba teniendo el mismo problema y resuelto añadiendo:

(a) un behaviorConfiguration = "" para el punto final mex

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" behaviourConfiguration="" /> 

(b) una behaviorConfiguration = "MEX" al servicio de definición:

<services> 
    <service name="AcmeService" behaviorConfiguration="mex"> 

(c) El comportamiento de entrada

<behaviors> 
    <serviceBehaviors> 
     <behaviour name="mex"> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <serviceMetadata /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
+0

Esto me ha ayudado, así que he votado a favor, pero por favor corrija su respuesta para decir includeExceptionDetailInFaults intead de includeExceptionDetailInFauls – caa

Cuestiones relacionadas