Конфигурация клиента wcf не получает значения с сервера - PullRequest
0 голосов
/ 08 июня 2011

Я определил 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 ]

2 голосов
/ 08 июня 2011

Не каждое значение конфигурации, определенное в службе, передается клиенту через метаданные.Размеры буфера и квоты считывателя являются одним примером, потому что каждый участник обмена данными может устанавливать свои собственные значения - эти значения являются защитой от атаки типа «отказ в обслуживании» и могут различаться для службы и клиента в зависимости от обмена сообщениями.Например, если вы хотите загружать только большие наборы данных, вы должны правильно установить их в службе, но вам не нужно изменять их на клиенте.Загрузка имеет обратный эффект.

1 голос
/ 08 июня 2011

Это нормально. Эти свойства ограничены этим файлом конфигурации и не распространяются на службу. Клиенты и серверы могут иметь разные ограничения по размеру, в основном, чтобы помочь защитить сервер от чрезмерно длинных запросов (которые может ожидать клиент).

...