Файлы поддержки справочной службы WCF не обновляются - PullRequest
3 голосов
/ 24 сентября 2011

У меня есть решение VS 2010, содержащее проект службы WCF и проект модульного тестирования. В модульном тестовом проекте есть сервисная ссылка на сервис WCF.

Web.config для проекта службы WCF устанавливает для ряда атрибутов привязки значения, отличные от значений по умолчанию:

web.config: (специально примечание maxBufferSize = " 20000000 ")

<basicHttpBinding>
    <binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
      <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Ntlm"/>
      </security>
    </binding>
</basicHttpBinding>

При рассмотрении этой проблемы я пришел к выводу, что файлы поддержки сервисных ссылок проекта модульного теста не содержат ожидаемых значений (т. Е. Значений, настроенных в web.config службы WCF):

configuration.svcinfo: (В частности, обратите внимание maxBufferSize = " 65536 ")

  <binding hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" messageEncoding="Text" name="BasicHttpBinding_IBishopService" textEncoding="utf-8" transferMode="Buffered">
    <readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192" />
    <security mode="None">
      <message algorithmSuite="Default" clientCredentialType="UserName" />
      <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
    </security>
  </binding>

Удаление и повторное создание ссылки на службу или обновление ссылки на службу заново создает файлы, но я все равно получаю те же значения.

Почему?

Обновление

Вот app.config клиента

<binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="200000000" maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000"
                        maxBytesPerRead="200000000" maxNameTableCharCount="200000000" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

Та же проблема здесь и никакого решения после того, как полдня возится с конфигурационными файлами ... Обычно изменение автоматически сгенерированных файлов вызывает недовольство, поэтому я чувствую, что "должен быть лучший путь, Деннис".

ОБНОВЛЕНИЕ: я исправил свою проблему, удалив атрибут name в конфигурации привязки.Итак, ваш текущий web.config выглядит следующим образом:

<basicHttpBinding>
  <binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
    <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
    <security mode="TransportCredentialOnly">
      <transport clientCredentialType="Ntlm"/>
    </security>
  </binding>
</basicHttpBinding>

станет

<basicHttpBinding>
  <binding maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
    <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
    <security mode="TransportCredentialOnly">
      <transport clientCredentialType="Ntlm"/>
    </security>
  </binding>
</basicHttpBinding>

Я думаю, что вам нужно это только на стороне клиента.Удаляя атрибут name, вы, насколько я понимаю, меняете стандартную конфигурацию basicHttpBinding для вашего приложения.Кредиты для этого решения здесь .

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

<service name="ServiceName">

вам нужно

<service name="My.Namespace.ServiceName">
0 голосов
/ 24 сентября 2011

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

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

Btw. это особенность WCF, не связанная с общими веб-сервисами, и поэтому нет стандартного способа описать это в WSDL.

...