WCF - конфиг клиентского прокси НЕ соответствует сервису web.config - PullRequest
3 голосов
/ 16 марта 2009

У меня есть простая служба WCF, которая должна обрабатывать большие потоки данных, поэтому у меня есть множество значений конфигурации, превышающих значения по умолчанию. Недавно я переместил весь свой код в новое, реструктурированное решение, и я просто перешел на сервис. Однако, когда я пытаюсь сгенерировать клиентский прокси (используя либо WCFTestClient.exe, либо «Добавить ссылку на службу» в VS2008, значения в конфигурации клиентского прокси не совпадают с настройками, установленными для этой службы.

Это конфигурация сервера - обратите внимание на увеличенные значения для maxBufferSize, maxReceivedMessageSize, maxStringContentLength и MaxArrayLength

  <system.serviceModel>
    <bindings>    
      <basicHttpBinding>
        <binding name="default" maxBufferSize="5000000" maxReceivedMessageSize="5000000">
          <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
          <!-- turn this setting on to require SSL/https -->
          <!-- <security mode="Transport" /> -->
        </binding>       
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Consent.Service.SubjectConsentServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="Consent.Service.SubjectConsentServiceBehavior"
        name="Consent.Service.SubjectConsentService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="default"
          contract="Consent.Service.ISubjectConsentService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

Вот прокси, сгенерированный VS2008 с «Добавить ссылку на службу»

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_ISubjectConsentService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://server/Consent/services/SubjectConsent.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISubjectConsentService"
            contract="ServiceReference1.ISubjectConsentService" name="BasicHttpBinding_ISubjectConsentService" />
    </client>
</system.serviceModel>

Клиентский прокси имеет эти 4 значения, установленные по умолчанию.

Есть идеи, почему клиент использует значения по умолчанию?

1 Ответ

5 голосов
/ 16 марта 2009

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

Таким образом, вам необходимо переопределить их как на клиенте, так и на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...