2011-06-08 132 views
0

我已經在服務器配置文件中定義了maxBufferSize = 2147483647,maxBufferPoolSize = 2147483647,maxReceivedMessageSize = 2147483647,但是當我生成客戶端配置文件時,所有這些參數的值都默認在那裏我必須手動編輯它們。這是因爲我在MAXBUFFERSIZE,maxBufferPoolSize,maxReceivedMessageSize和maxItemsInObjectGraph使用最大值如何生成客戶端配置文件wcf客戶端配置沒有從服務器獲取值app.config

svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config net.tcp:/ 
/localhost:4365/MyService 

而且,是會打的表現?

--Server配置values--

<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> 

--AFTER做一些更testing--

maxItemsInObjectGraph犯規獲得包括在客戶端配置文件。如果客戶端發送大對象,則應手動更改maxItemsInObjectGraph。

<behaviors> 
    <endpointBehaviors> 
    <behavior name="FASTServiceBehaviour"> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

回答

2

並非在服務上定義的每個配置值都通過元數據傳遞給客戶端。緩衝區大小和讀取器配額就是一個例子,因爲通信中的每個參與者都可以設置自己的值 - 這些值可防禦拒絕服務攻擊,並且可基於交換的消息在服務和客戶端之間進行區分。例如,如果只想上傳大型數據集,則必須在服務上正確設置它們,但不需要在客戶端上修改它們。下載有相反的效果。

+0

因此,如果我期待客戶端發送大對象,我不知道在服務器端更改這些值,但不改變客戶端? – Asdfg 2011-06-08 13:58:47

+0

如果您不想將大對象發送回客戶端,則不需要更改它。 – 2011-06-08 14:00:04

+0

這是一種單向操作。客戶端不會收回任何東西。 – Asdfg 2011-06-08 14:00:57

1

這是正常現象。這些屬性僅限於該配置文件,並不包含該服務。客戶端和服務器可能有不同的大小限制,主要是爲了防止服務器長時間(客戶端可能期望的)出現過長的請求。

相關問題