дано: .NET 3.5, windows service — WCF, netTcpBinding
есть метод сервиса, который вызывается клиентом
bool ProcessData(DataSet ds, int method);
когда датасет небольшой — ~ 50kb все работает
когда датасет большой — ~ 5Mb — вызов не происходит — "... the maximum message quota ..."
пыталтись увеличивать "max*" поля — все равно не работает
(кстати, тоже самое работает если это WebService)
вопрос — что нужно сделать в случае с WCF, nettcpBinding, Windows Service чтобы можно было передавать большие объекты (Dataset в нашем случае)
Спасибо
<bindings>
<netTcpBinding>
<binding
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00"
transactionFlow="false"
transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"
listenBacklog="10"
maxBufferPoolSize="524288"
maxBufferSize="65536"
maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
Здравствуйте, Аноним, Вы писали:
А>вопрос — что нужно сделать в случае с WCF, nettcpBinding, Windows Service чтобы можно было передавать большие объекты (Dataset в нашем случае)
Использовать
streaming, если влезаете в его ограничения.
Бесконечное увеличение буфера — порочный путь, т.к. рано или поздно кто-то передаст буфер еще большего размера, чем указано в конфиге.
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, Аноним, Вы писали:
А>>вопрос — что нужно сделать в случае с WCF, nettcpBinding, Windows Service чтобы можно было передавать большие объекты (Dataset в нашем случае)
HL>Использовать streaming, если влезаете в его ограничения.
HL>Бесконечное увеличение буфера — порочный путь, т.к. рано или поздно кто-то передаст буфер еще большего размера, чем указано в конфиге.
спасибо... но не работает — есть пример?
в том то и дело, что в конфиге можно указать огромное число. Я указывал MaxInt (maxBufferPoolSize, maxBufferSize, maxConnections, maxReceivedMessageSize) и все равно 6Mb не передавалось
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, Аноним, Вы писали:
А>>вопрос — что нужно сделать в случае с WCF, nettcpBinding, Windows Service чтобы можно было передавать большие объекты (Dataset в нашем случае)
HL>Использовать streaming, если влезаете в его ограничения.
HL>Бесконечное увеличение буфера — порочный путь, т.к. рано или поздно кто-то передаст буфер еще большего размера, чем указано в конфиге.
более того,
Operations that occur across a streamed transport can have a contract with at most one input or output parameter. That parameter corresponds to the entire body of the message and must be a Message, a derived type of Stream, or an IXmlSerializable implementation.
а мне надо несколько параметров
bool ProcessData(DataSet ds, int method);
Здравствуйте, Аноним, Вы писали:
Посмотрите на
Message Contracts.
client:
<behaviors>
<endpointBehaviors>
<behavior name="...">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
server:
<serviceBehaviors>
<behavior name="...">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
оно?