我在服务器配置文件中定义了maxBufferSize = 2147483647,maxBufferPoolSize = 2147483647,maxReceivedMessageSize = 2147483647但是当我生成客户端配置文件时,所有这些参数的值都默认在那里,我必须手动编辑它们。这就是我生成客户端配置文件的方式
svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config net.tcp:/
/localhost:4365/MyService
此外,由于我在maxBufferSize,maxBufferPoolSize,maxReceivedMessageSize和maxItemsInObjectGraph中使用最大值,是否会达到性能?
- 服务器配置值 -
<bindings>
<netTcpBinding>
<binding name="MySvc_InsecureTcp" closeTimeout="00:01:10" openTimeout="00:01:10" receiveTimeout="24.20:31:23.6470000"
listenBacklog="1000" maxConnections="1000" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None">
<transport protectionLevel="None" />
</security>
</binding>
<binding name="MySvc_mexBinding" closeTimeout="00:01:10" openTimeout="00:01:10" receiveTimeout="24.20:31:23.6470000"
listenBacklog="1000" maxConnections="1000" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None">
<transport protectionLevel="None" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyService">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceThrottling maxConcurrentCalls="30" maxConcurrentInstances="2147483647" maxConcurrentSessions="30" />
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyNameSpace.MyService" behaviorConfiguration="MyService">
<endpoint address="" binding="netTcpBinding" contract="MyNameSpace.IMyService"
bindingConfiguration="MySvc_InsecureTcp" name="netTcpMySvc" >
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="netTcpBinding" contract="IMetadataExchange"
bindingConfiguration="MySvc_mexBinding" name="mexMySvc" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:4365/MyService"/>
</baseAddresses>
</host>
</service>
</services>
- 做了一些更多测试 -
maxItemsInObjectGraph不会包含在客户端配置文件中。如果客户端正在发送大对象,则应手动更改maxItemsInObjectGraph。
<behaviors>
<endpointBehaviors>
<behavior name="FASTServiceBehaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
答案 0 :(得分:2)
并非服务上定义的每个配置值都通过元数据传递给客户端。缓冲区大小和读取器配额是一个示例,因为通信中的每个参与者都可以设置自己的值 - 这些值是对拒绝服务攻击的防御,并且可以基于交换的消息在服务和客户端之间不同。例如,如果您只想上传大型数据集,则必须在服务上正确设置它们,但不需要在客户端上修改它们。下载有相反的效果。
答案 1 :(得分:1)
这很正常。这些属性仅限于该配置文件,并且不会传输服务。客户端和服务器可以有不同的大小限制,主要是为了帮助保护服务器免受长时间的请求(客户端可能期望的那样)。