Pregunta

I want to launch the following WCF service:

<system.serviceModel>
  <services>
   <service name="MTPlatform">
      <endpoint address="TradingService" behaviorConfiguration="ServiceBehaviour"
               binding="netNamedPipeBinding"  
               bindingConfiguration="NetNamedPipeBinding_IGenericTradingInterface"
               contract="GenericTradingInterface.IGenericTradingInterface"
               name="TradingService"  />
      <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
           <add baseAddress="net.pipe://localhost" />
        </baseAddresses>
        <timeouts closeTimeout="00:00:02" openTimeout="00:00:20" />
      </host>
   </service>
  </services>
  <bindings>
     <netNamedPipeBinding>
        <binding name="NetNamedPipeBinding_IGenericTradingInterface"
                 closeTimeout="00:05:20" openTimeout="00:00:20" receiveTimeout="05:20:00"
                 sendTimeout="00:10:00" transactionFlow="false" transferMode="Buffered"
                 transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="2147483646" maxBufferSize="2147483646" maxConnections="10"
                 maxReceivedMessageSize="2147483646">
              <readerQuotas maxDepth="2147483646" maxStringContentLength="2147483646"
                            maxArrayLength="2147483646" maxBytesPerRead="2147483646" 
                            maxNameTableCharCount="2147483646" />
              <security mode="Transport">
                 <transport protectionLevel="EncryptAndSign" />
              </security>
         </binding>
     </netNamedPipeBinding>
   </bindings>
   <behaviors>
       <endpointBehaviors>
           <behavior name="ServiceBehaviour">
               <dataContractSerializer maxItemsInObjectGraph="2147483646" />
           </behavior>
       </endpointBehaviors>
       <serviceBehaviors>
           <behavior name="MetaDataBehavior">
                <serviceMetadata />
           </behavior>
       </serviceBehaviors>
   </behaviors>
</system.serviceModel>

This fails with:

The contract name 'IMetadataExchange' could not be found in the list of contracts implemented by the service MT5Platform. Add a ServiceMetadataBehavior to the configuration file or to the ServiceHost directly to enable support for this contract.

I don't see big mistakes here, where can one find IMetadataExchange?

Thanks,

Juergen

¿Fue útil?

Solución

You need to reference the service behavior called "MetaDataBehavior" in your <service> element. Also, for the sake of the sanity of other developers in your team, please don't have an endpoint behavior with a name "ServiceBehaviour" - that's asking for trouble :)

<system.serviceModel>
<services> 
 <service name="MTPlatform" behaviorConfiguration="MetaDataBehavior"> 
  <endpoint address="TradingService" behaviorConfiguration="IncreaseMIIOGEndpointBehaviour" 
   binding="netNamedPipeBinding" bindingConfiguration="NetNamedPipeBinding_IGenericTradingInterface" 
   name="TradingService" contract="GenericTradingInterface.IGenericTradingInterface" /> 
  <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" /> 
  <host> 
   <baseAddresses> 
    <add baseAddress="net.pipe://localhost" /> 
   </baseAddresses> 
   <timeouts closeTimeout="00:00:02" openTimeout="00:00:20" /> 
  </host> 
 </service> 
</services> 
<behaviors> 
 <endpointBehaviors> 
  <behavior name="IncreaseMIIOGEndpointBehaviour"> 
   <dataContractSerializer maxItemsInObjectGraph="2147483646" /> 
  </behavior> 
 </endpointBehaviors> 
 <serviceBehaviors> 
  <behavior name="MetaDataBehavior"> 
   <serviceMetadata /> 
  </behavior> 
 </serviceBehaviors> 
</system.serviceModel>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top