2009-02-19 10 views

Antwort

2

Es gibt kein Maximum. Sie können so viele haben wie Sie möchten, AFAIK.

Ob es jedoch praktisch ist, ist ein anderes Problem. Es wird ziemlich unhandlich, wenn Sie zu viele Methoden für einen einzelnen Vertrag haben.

7

Obwohl es kein Maximum gibt, können Sie Probleme mit Metadata Exchange - und dem folgenden Konfigurationswert und es ist Standard: maxNameTableCharCount.

Während eine neue Funktion zu einem vorhandenen funktionierenden WCF Service hinzuzufügen versuchen, traf ich Fehler während versuchen, „Update Service Referenz“ - in Bezug auf Standardwert von maxNameTableCharCount zu klein sind, um die Größe des mex Transfers zu handhaben.

Es ist möglich, die Standardwerte für Metadata Exchange durch Hinzufügen einer benutzerdefinierten mex binding innerhalb der Serverkonfiguration zu überschreiben.

Sie eine Fehlermeldung wie unten sehen kann, wenn Sie Ihren Dienst Verweis hinzuzufügen oder zu aktualisieren, wenn der Konfigurationswert überschritten wird:

Die maximale Nametable Zeichenzahl Quote (16384) überschritten wurde beim Lesen XML-Daten Die Nametabelle ist eine Datenstruktur, die für Speicherzeichenfolgen verwendet wird, die während der XML-Verarbeitung gefunden werden. Lange XML-Dokumente mit sich nicht wiederholenden Elementnamen, Attributnamen und Attributwerten können dieses Kontingent auslösen. Dieses Kontingent kann erhöht werden, indem die MaxNameTableCharCount-Eigenschaft für das XmlDictionaryReaderQuotas-Objekt geändert wird, das beim Erstellen des XML-Readers verwendet wurde. Zeile 1, Position 332845.

Server Mex Endpunkte festgelegt werden sollte, wie folgt:

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

Mit einem benutzerdefinierten Bindungsblock wie folgt angegeben:

<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> 

es, wenn Sie helfen können‘ Probleme mit vielen Methoden für einen Dienst behoben werden.

+1

'mex' wird von den WCF-Tools verwendet, um eine Proxy-Klasse für den Client zu generieren, wird aber nie vom Client selbst verwendet. Warum braucht die Client-Konfigurationsdatei diese Bindung hinzugefügt? – mcoolbeth

+0

Sie haben recht, die Client-Konfiguration erfordert keine entsprechende Konfiguration. Ich habe den Beitrag jetzt geändert, danke. – Tanner

+0

Ich hatte keinen Erfolg mit dieser Methode. Ich verwende die netTcp-Bindung für meinen Dienst. Ich habe http deaktiviert, und so habe ich tcpTransport anstelle von httpTransport angegeben. Aber das scheitert immer noch, wenn ich eine große Anzahl von OperationContracts habe. Kann irgendjemand irgendeinen Beitrag leisten? –

0

Die praktische Grenze ist wahrscheinlich nicht mehr als 10-12 Methoden. Mehr als das und Sie beschreiben wahrscheinlich nicht mehr die Operationen einer einzelnen Komponente. Ich würde wirklich versuchen, jede Komponente mit Dutzenden von Operationen in mehrere Komponenten umzuwandeln.

Das sagte, ich bin sicher, dass es Ausnahmen gibt!

Verwandte Themen