更新服务参考坚持将Soap12添加到Config。

时间:2011-12-30 12:54:51

标签: asp.net-mvc wcf visual-studio-2010 web-services

当我更新服务参考时,我最终得到:

无法加载合同“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 个答案:

答案 0 :(得分:3)

没有可靠的解决方法。我投了你的问题。我是同一个问题的受害者,虽然现在我转而使用svcutil生成dll但是这个问题已经报告给了Microsoft update-or-configure-an-existing-service-reference-in-sl-application-you-get-duplicate-binding-and-endpoint-information

他们说,它已在VS2010中修复但我确认不是,我也安装了VS2010 SP1,但这也没有在SP1中修复。因此,没有给出修复,并且bug被关闭为“外部”。奇怪。

在错误报告页面上,您还可以找到解决方法,但我发现它很乱。

另一种解决方法是使用硬编码的绑定名称创建服务客户端对象以避免双端点

MyService.MainServiceSoap mainServiceSoap = new MyService.MainServiceSoap(“MainServiceSoap”);

或者最后我们可以在Microsoft打开另一个错误报告并投票修复它。

答案 1 :(得分:2)

.NET 2.0中的新ASMX运行时支持SOAP 1.2。目前,SOAP 1.1在业界得到最广泛的应用。在.NET Framework中,支持SOAP 1.1和SOAP 1.2。这意味着在.NET Framework 2.0中创建的Web服务将配置为支持SOAP 1.1和SOAP 1.2消息。这间接意味着为Web服务创建的WSDL将具有两种类型的绑定,即SOAP 1.1和SOAP 1.2。

Taken from here

这就是生成两个绑定的原因。

<remove name="HttpSoap12"/>

我想我现在如何禁用此功能,我可以理解为什么您将此视为一种解决方法。 当您将Web服务移动到新框架时,可能会导致这种情况,这就是为什么1.1上的某些旧Web服务可能不会以相同方式响应的原因。 尝试定位2.0框架可能会看到会发生什么。

答案 2 :(得分:-3)

我只是手动调用svcutil.exe来重建我的代理类。更简单。