Обновите сервисную ссылку, настаивайте на добавлении Soap12 в Config. - PullRequest
10 голосов
/ 30 декабря 2011

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

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

мой 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, и все работает отлично. Но если я снова обновлю службу (щелкните правой кнопкой мыши ссылку «Служба обновления»), добавленная пользовательская привязка будет добавлена ​​снова, что приведет к ошибке и необходимости вручную удалить ее из файла конфигурации.

Кто-нибудь знает, как это исправить? Я не хочу / не нуждаюсь в специальной привязке 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>

Ответы [ 3 ]

3 голосов
/ 17 января 2012

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

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

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

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

MyService.MainServiceSoap mainServiceSoap = new MyService.MainServiceSoap ("MainServiceSoap");

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

2 голосов
/ 16 января 2012

Новая среда выполнения 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, возможно, посмотрите, что произойдет.

0 голосов
/ 30 декабря 2011

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

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