WCF мекс слишком большой - PullRequest
       17

WCF мекс слишком большой

2 голосов
/ 19 января 2010

У меня есть привязка mex, которая превышает квоту читателя в 16 КБ. Я знаю, как увеличить размер базовых привязок Http, но привязка mexHttp не позволяет одинаково увеличивать размеры буфера и т. Д.

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

Может кто-нибудь предложить решение для увеличения размера, разрешенного для mex-файла?

Вот фактическая ошибка:

Ошибка: невозможно получить метаданные из http://localhost:8021/mex Если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу. Для получения справки о включении публикации метаданных см. Документацию MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI ошибки Exchange: http://localhost:8021/mex Метаданные содержат ссылку, которая не может быть разрешена: 'http://localhost:8021/mex'. Ошибка в XML документ (1, 148711). Максимальная квота числа именных символов (16384) была превышена при чтении данных XML. Nametable - это структура данных, используемая для хранения строк, обнаруженных во время обработки XML - эта квота может вызывать длинные XML-документы с неповторяющимися именами элементов, именами атрибутов и значениями атрибутов. Эту квоту можно увеличить, изменив свойство MaxNameTableCharCount в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML. Строка 1, позиция 148711.HTTP GET Ошибка URI: http://localhost:8021/mex Произошла ошибка при загрузке 'http://localhost:8021/mex'. Запрос не выполнен с состоянием HTTP 400: Bad Request.

1 Ответ

1 голос
/ 19 января 2010

Попробуйте следующую пользовательскую привязку для конечной точки mex:

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

Вы можете изменить размеры, если хотите, и связать привязку с конечной точкой, как показано ниже:

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

Svcutil Config Override

Если вы используете svcutil, у него есть свои собственные ограничения, которые могут быть изменены путем создания файла конфигурации, как описано в этой статье Geeks With Blogs

...