WCF подесувања и Exception на „кинески“ јазик
Доколку дојдете во ситуација каде ќе го имате следниот Exception кој напрво многу ќе ве збуни, знајте дека се работи за едноставна промена во конфигурацијата на вашиот WCF сервис и клиент, и тој да исчезне. Exception-от е следен:
The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation ‘Test’. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.
Иако пораката јасно кажува дека треба да се промени MaxStringContentLength property но следниот објект (XmlDictionaryReaderQuotas) споменат во порака многу ке ве одвелече од правото место на промена на споменатото property.
Имено MaxStringContentLength property-то ја ограничува големината на стрингот (во byte-и) кој се враќа од некој повик на API. Default вредноста е 8192. XmlDictionaryReaderQuotas е објект од System.Runtime.Serialization namespace-от кој се грижи за серијализација на објектите кои се разменуваат во пораките при WCF комуникацијата. Подесувањето на овие т.н. quotа-и се врши наједноставно во .config file-от на сервисот но и на клиентот.
| <binding .... .... <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> ... </binding> |
Останатите полиња во овој config на кои треба да се обрне внимание доколку се појави овој тип на грешка се:
- MaxReceivedMessageSize - кој ја ограничува максималната големина на една порака испратена до WCF сервисот
- MaxArrayLength - кој ја ограничува максималната големина на една низа која се испраќа до WCF