[英]Transmitting the least amount of data over the wire with WCF
我的項目有一個netTCP WCF服務。 這是它的app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IIndexer" 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="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://mach1:9000/Indexer" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IIndexer" contract="in.IIndexer"
name="NetTcpBinding_IIndexer" />
</client>
</system.serviceModel>
</configuration>
有什么可以做的事情來最大程度地壓縮通過網絡發送的數據? 我的項目是內部項目,因此速度和處理能力基本上沒有問題。
壓縮從客戶端發送到WCF服務的數據有哪些好的技巧和竅門?
綁定指定的消息編碼將確定如何將數據轉換為在線上的字節。 對於NetTcpBinding,它將自動使用二進制編碼,從而為您提供所有內置WCF編碼器中最緊湊的消息表示形式。
有關更多信息,我建議以下資源:
這取決於您要發送的數據類型,但是如果您要使用序列化來創建數據,則序列化為XML並使用GZipStream壓縮它所產生的字節數要比壓縮二進制序列化所生成的數據少。
我仍在嘗試將所有這些整合在一起,但我確實知道,當您使用DataContractAttribute時,您正在使用DataContract序列化。 我不清楚這個序列化方案和Serializable方案之間的區別,但是根據我的了解,它們是不同的。
SO的主持人之一Marc Gravell是我一直致力於解決此問題的專家。 他實際上有一個稱為protobuf-net的序列化方案,可在此處使用。
使用壓縮..在4.5中
<binaryMessageEncoding compressionFormat="GZip"/> <tcpTransport maxReceivedMessageSize="20000000"/> </binding>
不要使用將命名空間設置為“”的命名空間(以及在服務協定上也是如此)。[DataContract(Namespace =“”)]公共類AddDeckMessage
很少(如果曾經在XML上發送接口/基類)... XML無法理解,並且會添加Microsoft引爆的XML。 請勿使用可自定義導線的已知類型使用普通DTO ...
使用EmitDefaultValue
注意使用非tcp壓縮的byte []。 如果將其視為123,則每個字節將看到15-30個字節,具體取決於編碼。 如果需要使用標准WS協議,請使用uuencode。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.