2009-02-19 15 views

Respuesta

2

No hay un máximo. Puedes tener todos los que quieras, AFAIK.

Sin embargo, si es práctico o no es un problema diferente. Se volverá bastante difícil si tiene demasiados métodos en un solo contrato.

7

Aunque no hay un máximo, puede tener problemas con Metadata Exchange - y el siguiente valor de configuración y es predeterminado: maxNameTableCharCount.

Mientras que intentar añadir una nueva función a un funcionamiento existente WCF Service, me encontré con errores al mismo tiempo tratando de "servicio de actualización de Referencia" - en relación con el valor por defecto de maxNameTableCharCount ser demasiado pequeña para manejar el tamaño de la transferencia mex.

Es posible anular los valores predeterminados para Metadata Exchange agregando un mex binding personalizado dentro de la configuración del servidor.

Es posible que aparezca un mensaje de error como el de abajo cuando intenta añadir o actualizar la referencia de servicio si se supera el valor de configuración:

La cuota recuento de caracteres NameTable máximo (16384) se ha superado durante la lectura Datos XML La tabla de nombres es una estructura de datos utilizada para cadenas de tiendas encontradas durante el procesamiento XML. Los documentos XML largos con nombres de elementos no repetitivos, nombres de atributos y valores de atributo pueden activar esta cuota. Esta cuota se puede aumentar cambiando la propiedad MaxNameTableCharCount en el objeto XmlDictionaryReaderQuotas utilizado al crear el lector XML. Línea 1, posición 332845.

puntos finales de servidor Mex deben especificarse como sigue:

<endpoint address="mex" 
      binding="customBinding" 
      contract="IMetadataExchange" 
      name="" 
      bindingConfiguration="customMex" 
      listenUriMode="Explicit" /> 

Con un bloque personalizado de enlace especificadas como sigue:

<customBinding> 
    <binding name="customMex"> 
     <textMessageEncoding> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
     </textMessageEncoding> 
     <httpTransport transferMode="Buffered" maxReceivedMessageSize="2147483647" 
         maxBufferSize="2147483647"/> 
    </binding> 
</customBinding> 

Puede ayudar si usted' estamos teniendo problemas con muchos métodos en un servicio.

+1

'mex' es utilizado por las herramientas WCF para generar una clase de proxy para el cliente, pero nunca lo usa realmente el cliente. Entonces, ¿por qué el archivo de configuración del cliente necesita este enlace agregado? – mcoolbeth

+0

Tiene toda la razón, la configuración del cliente no requiere ninguna configuración correspondiente. He modificado la publicación ahora, gracias. – Tanner

+0

No he tenido ningún éxito siguiendo este método. Estoy usando el enlace netTcp para mi servicio. Tengo http deshabilitado, así que he especificado tcpTransport en lugar de httpTransport. Pero esto todavía falla cuando tengo una gran cantidad de OperationContracts. ¿Alguien puede proporcionar alguna entrada? –

0

El límite práctico probablemente no sea más de 10-12 métodos. Más que eso y probablemente ya no estés describiendo las operaciones de un solo componente. Me esforzaría por refaccionar cualquier componente con docenas de operaciones en múltiples componentes.

Dicho esto, ¡estoy seguro de que hay excepciones!