Справочная служба обновления настаивает на добавлении Soap12 в Config.

Когда я обновляю ссылку на службу, я получаю:

Раздел конфигурации конечных точек для контракта "MyService.MainServiceSoap" не может быть загружен, потому что было найдено более одной конфигурации конечной точки для этого контракта. Пожалуйста, укажите предпочтительный раздел конфигурации конечной точки по имени.

my web.config заканчивается следующим образом:

конечные точки:

  <endpoint address="http://localhost/main/MainService.asmx"
    binding="basicHttpBinding" bindingConfiguration="MainServiceSoap"
    contract="MyService.MainServiceSoap" name="MainServiceSoap" />
  <endpoint address="http://localhost/main/MainService.asmx"
    binding="customBinding" bindingConfiguration="MainServiceSoap12"
    contract="MyService.MainServiceSoap" name="MainServiceSoap12" />

привязок:

  <basicHttpBinding>
    <binding name="MainServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferSize="655360" maxBufferPoolSize="5242880" maxReceivedMessageSize="655360"
      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="81920" maxArrayLength="163840"
        maxBytesPerRead="40960" maxNameTableCharCount="163840" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
  <customBinding>
    <binding name="MainServiceSoap12">
      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap12" writeEncoding="utf-8">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      </textMessageEncoding>
      <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
        bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
        keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
        useDefaultWebProxy="true" />
    </binding>
  </customBinding>

Я вручную удаляю customBinding и конечную точку Soap12, и все работает нормально. Но если я снова обновлю службу (щелкните правой кнопкой мыши Update Service Reference), добавленная пользовательская привязка добавится снова, вызывая ошибку и необходимость вручную удалить из файла конфигурации.

Кто-нибудь знает, как это исправить? Я не хочу/нуждаюсь в пользовательской привязке soap12.

Это файл конфигурации службы:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <globalization culture="es-PY" uiCulture="es-PY"/>
    <customErrors mode="Off"/>
    <webServices>
<!-- Tried adding and/or removing protocols and conformanceWarnings -->
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
<!-- -->
      <conformanceWarnings>
        <remove name="BasicProfile1_1"/>
      </conformanceWarnings>
    </webServices>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.serviceModel>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="standard" maxReceivedMessageSize="6553600" maxBufferSize="6553600" transferMode="Streamed" helpEnabled="true" automaticFormatSelectionEnabled="true">
          <readerQuotas maxStringContentLength="65536000" maxArrayLength="163840" />
        </standardEndpoint>
      </webHttpEndpoint>
    </standardEndpoints>
    <behaviors>
      <serviceBehaviors>
        <behavior>

          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <!--<serviceMetadata httpGetEnabled="true"/>-->
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>

        </behavior>
      </serviceBehaviors>
    </behaviors>
<!-- Tried setting multipleSiteBindingEnalbed true and false -->
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
<!--  -->

  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  <connectionStrings>
    <clear/>
    <add name="GamblingEntities" connectionString="..." providerName="System.Data.EntityClient" />
    <add name="GamblingSiteEntities" connectionString="..." providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <clear/>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, &#xA;Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
    </DbProviderFactories>
  </system.data>
</configuration>

Ответ 1

Новая среда ASMX в .NET 2.0 поддерживает SOAP 1.2. В настоящий момент SOAP 1.1 наиболее широко используется в отрасли. В .NET Framework поддерживаются как SOAP 1.1, так и SOAP 1.2. Это означает, что веб-службы, созданные в .NET Framework 2.0, будут настроены для поддержки сообщений SOAP 1.1 и SOAP 1.2. Это косвенно означает, что WSDL, созданные таким образом для веб-службы, будут иметь два типа привязок, то есть SOAP 1.1 и SOAP 1.2.

Взято отсюда

Вот почему генерируются две привязки.

<remove name="HttpSoap12"/>

Я думаю, это я, как вы отключите это сейчас, я могу понять, почему вы видите это как обходной путь. Возможно, это вызвало это, когда вы перевели свой веб-сервис в новую структуру, и поэтому некоторые из ваших старых веб-сервисов на 1.1, возможно, не отвечают одинаково. Попробуйте настроить таргетинг на 2.0 framework, возможно, чтобы узнать, что произойдет.

Ответ 2

Не существует прочного обходного пути. Я проголосовал за ваш вопрос. Я стал жертвой той же проблемы, хотя теперь я переключился на создание dll с помощью svcutil, но эта проблема была отправлена ​​Microsoft здесь update-or-configure-an-existing-service-reference-in-sl-application-you-get-duplicate-binding-and-endpoint-information

Они сказали, что исправлены в VS2010, но я не подтверждаю это, у меня также установлен VS2010 SP1, но это также не исправлено в SP1. Таким образом, это не исправлено, и ошибка закрыта как "Внешняя". странно.

На странице отчета об ошибке вы также можете найти обходной путь, но я нахожу это беспорядочным.

Другим обходным решением является создание клиентского объекта службы с обязательным именем, жестко закодированным, чтобы избежать двойной конечной точки

MyService.MainServiceSoap mainServiceSoap = новый MyService.MainServiceSoap( "MainServiceSoap" );

или, наконец, мы можем открыть еще один отчет об ошибке в Microsoft и проголосовать, чтобы исправить его.

Ответ 3

Я просто вызываю svcutil.exe вручную, чтобы перестроить мой прокси-класс. Гораздо проще.