Служба WCF Максимальное количество методов - PullRequest
5 голосов
/ 19 февраля 2009

Каково максимальное количество методов / операций, которые могут быть представлены через один сервисный контракт WCF?

Ответы [ 3 ]

7 голосов
/ 19 февраля 2009

Хотя максимума нет, вы можете столкнуться с проблемами с Metadata Exchange - и следующим значением конфигурации и его значением по умолчанию: maxNameTableCharCount.

При попытке добавить новую функцию к существующему функционированию WCF Service я обнаружил ошибки при попытке " Обновить ссылку на службу " - относительно значения по умолчанию maxNameTableCharCount, слишком маленького для обработки размер mex перевода.

Можно переопределить значения по умолчанию для Metadata Exchange, добавив пользовательский mex binding в конфигурацию сервера.

Вы можете увидеть сообщение об ошибке, подобное приведенному ниже, при попытке добавить или обновить ссылку на службу, если превышено значение конфигурации:

Превышена максимальная квота числа именных символов (16384) при чтении данных XML. Nametable - это структура данных, используемая для хранить строки, встречающиеся при обработке XML - длинные XML-документы с неповторяющимися именами элементов, именами атрибутов и значениями атрибутов может вызвать эту квоту. Эта квота может быть увеличена путем изменения Свойство MaxNameTableCharCount для объекта XmlDictionaryReaderQuotas используется при создании читателя XML. Строка 1, позиция 332845.

Конечные точки Mex сервера должны быть указаны следующим образом:

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

С пользовательским блоком привязки, указанным следующим образом:

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

Это может помочь, если у вас возникли проблемы с большим количеством методов в службе.

2 голосов
/ 19 февраля 2009

Максимума нет. Вы можете иметь столько, сколько пожелаете, AFAIK.

Однако, является ли это практичным, это другой вопрос. Это станет довольно громоздким, если у вас слишком много методов в одном контракте.

0 голосов
/ 19 февраля 2009

Практический предел, вероятно, не более 10-12 методов. Более того, и вы, вероятно, больше не будете описывать операции одного компонента. Я бы очень старался реорганизовать любой компонент с десятками операций на несколько компонентов.

Тем не менее, я уверен, что есть исключения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...