我在我的WCF服务的app.config
文件中定义了这样的绑定:
<bindings>
<netTcpBinding>
<binding name="Binding1"
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="524288"
maxConnections="10"
maxReceivedMessageSize="524288">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true"
inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" algorithmSuite="Default" />
</security>
</binding>
</netTcpBinding>
</bindings>
请注意,我已将maxBufferSize
和maxReceivedMessageSize
设置为524288字节。在我的客户端项目中,当我单击“添加服务引用”时,我能够发现并添加我的服务。但它填写了我的客户端app.config
这样的文件
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_AgileService" 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="Message">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" algorithmSuite="Default" />
</security>
</binding>
</netTcpBinding>
</bindings>
我很好奇为什么maxBufferSize
和maxReceivedMessageSize
已恢复为我的客户app.config
中的默认值。这些设置是否单独应用于客户端和服务器?换句话说,客户端和服务器是否都有自己的消息大小限制?
我还需要在客户端上做些什么来确保客户端愿意发送524288字节的消息吗? (我只关心客户端 - &gt;服务器通信)
答案 0 :(得分:1)
是的,这些设置特定于客户端或服务器(取决于您正在处理的配置)。 MaxReceivedMessageSize
仅适用于服务或客户端收到的邮件大小,而不是发送邮件的大小。
您可能需要增加MaxStringContentLength
中的ReaderQuotas
以处理更大的消息。此外,您需要确保在服务的端点中引用服务配置文件中的Binding1配置(通过bindingConfiguration
属性),否则您的服务将恢复为NetTcpBinding的默认设置。
示例:
<services>
<service behaviorConfiguration="MyBehavior" name="MyService">
<endpoint address="" binding="netTcpBinding"
bindingConfiguration="Binding1"
contract="MyService.IMyContract" />
</service>
</services>
答案 1 :(得分:0)
注意MaxReceivedMessageSize的名称。关于数据的大小,数据的接收器准备接受。因此,客户端和服务可能需要不同的值 - 因此这些值不是元数据生成值的一部分