Qual è il numero massimo di metodi/operazioni che possono essere esposti tramite un singolo contratto di servizio WCF?Servizio WCF Numero massimo di metodi
risposta
Non c'è il massimo. Puoi avere quanti ne vuoi, AFAIK.
Tuttavia, se sia o meno pratico è un problema diverso. Diventerà abbastanza ingombrante se hai troppi metodi su un singolo contratto.
Anche se non c'è il massimo, è possibile che si verifichino problemi con Metadata Exchange
- e il seguente valore di configurazione e il valore predefinito: maxNameTableCharCount
.
Mentre si tenta di aggiungere una nuova funzione a un esistente funzionante WCF Service
, ho incontrato gli errori mentre sta cercando di "Aggiornamento Service Reference" - relativa al valore di default di maxNameTableCharCount
essere troppo piccolo per gestire le dimensioni del trasferimento mex
.
È possibile sovrascrivere i valori predefiniti per Metadata Exchange
aggiungendo un valore personalizzato mex binding
all'interno della configurazione del server.
Potrebbe essere visualizzato un messaggio di errore come qui di seguito quando si tenta di aggiungere o aggiornare il riferimento al servizio se il valore di configurazione viene superato:
La quota conteggio dei caratteri NameTable massimo (16384) è stato superato durante la lettura Dati XML L'identificabile è una struttura dati utilizzata per le stringhe di archivio incontrate durante l'elaborazione XML: i documenti XML lunghi con nomi di elementi non ripetuti, nomi di attributi e valori di attributo possono attivare questa quota. Questa quota può essere aumentata modificando la proprietà MaxNameTableCharCount sull'oggetto XmlDictionaryReaderQuotas utilizzata durante la creazione del lettore XML. Linea 1, la posizione 332845.
Server Mex endpoint devono essere specificati come segue:
<endpoint address="mex"
binding="customBinding"
contract="IMetadataExchange"
name=""
bindingConfiguration="customMex"
listenUriMode="Explicit" />
Con un blocco personalizzato di rilegatura specificato come segue:
<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>
Può essere utile se si' rielaborare problemi con molti metodi su un servizio.
Il limite pratico è probabilmente non più di 10-12 metodi. Più di questo e probabilmente non descrivi più le operazioni di un singolo componente. Cercherò davvero di rifattorizzare qualsiasi componente con dozzine di operazioni in più componenti.
Detto questo, sono sicuro che ci sono delle eccezioni!
'mex' viene utilizzato dagli strumenti WCF per generare una classe proxy per il client, ma non viene mai realmente utilizzata dal client stesso. Quindi, perché il file di configurazione del client ha bisogno di questa associazione aggiunta? – mcoolbeth
Hai perfettamente ragione, la configurazione del client non richiede alcuna configurazione corrispondente. Ho modificato il post ora, grazie. – Tanner
Non ho avuto alcun successo seguendo questo metodo. Sto usando il binding netTcp per il mio servizio. Ho http disabilitato e quindi ho specificato tcpTransport invece di httpTransport. Ma questo non funziona ancora quando ho un gran numero di OperationContracts. Qualcuno può fornire qualche input? –