wcf客户端配置无法从服务器app.config获取值

时间:2011-06-08 13:50:48

标签: wcf wcf-binding wcf-client

我在服务器配置文件中定义了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>

2 个答案:

答案 0 :(得分:2)

并非服务上定义的每个配置值都通过元数据传递给客户端。缓冲区大小和读取器配额是一个示例,因为通信中的每个参与者都可以设置自己的值 - 这些值是对拒绝服务攻击的防御,并且可以基于交换的消息在服务和客户端之间不同。例如,如果您只想上传大型数据集,则必须在服务上正确设置它们,但不需要在客户端上修改它们。下载有相反的效果。

答案 1 :(得分:1)

这很正常。这些属性仅限于该配置文件,并且不会传输服务。客户端和服务器可以有不同的大小限制,主要是为了帮助保护服务器免受长时间的请求(客户端可能期望的那样)。