15

我们有使用 WCF 的 ASP.Net Web 应用程序。作为 Windows 服务托管的 wcf 服务。一切皆好。然后我们进行了更改,以便服务合同将具有不同的命名空间(从 Namespace1.IserviceContract 到 Namespace2.IserviceContract)。在我们部署到服务器的更改之后,当我们尝试实例化服务对象时出现以下错误。

    System.InvalidOperationException: An endpoint configuration section for contract 'Namespace2.IserviceContract' could not be loaded because more than one endpoint configuration for that contract was found. Please indicate the preferred endpoint configuration section by name.

Generated: Fri, 06 Jul 2012 21:02:56 GMT


System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.InvalidOperationException: An endpoint configuration section for contract 'Namespace2.IserviceContract' could not be loaded because more than one endpoint configuration for that contract was found. Please indicate the preferred endpoint configuration section by name.
   at System.ServiceModel.Description.ConfigLoader.LookupChannel(String configurationName, String contractName, Boolean wildcard)
   at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
   at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
   at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
   at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
   at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
   at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
   at System.ServiceModel.EndpointTrait`1.CreateChannelFactory()
   at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
   at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
   at System.ServiceModel.ClientBase`1..ctor()
   at TestApplication.ManagementWrapper.VerifyAuthentication(Int32 appId, String Token)
   at TestApplication.VerifyAuthentication(String tokenstring)

我们对此问题进行了研究,发现如果我们在 web.config 文件中定义了两个客户端端点,则会出现这种类型的异常。但是我们确信我们只定义了一个客户端端点。此异常仅显示在服务器中。本地工作正常。这是我们的服务模式:

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_Management" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="4194304" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="32768" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://servername:9010/Management/service/ManagementService" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_Management" contract="Namespace2.IserviceContract" name="NetTcpBinding_IserviceContract" />
    </client>
  </system.serviceModel>

我们还尝试重新启动 IIS 和应用程序池。仍然得到同样的例外。

4

4 回答 4

22

尝试在您的 web.config 中搜索使用该 Web 地址作为 ManagementService 的另一个。此外,在 web.config 中搜索对旧命名空间 (contract="Namespace1.IserviceContract") 的任何引用。不要忘记检查额外的 .config 文件。那个小问题以前让我很生气。

于 2012-08-15T14:17:25.630 回答
3

无论调用什么协议,如基本、net.tcp 或 wshttp,该地址都应该在 web 配置文件中从app.config 文件中的客户端部分删除其他地址,在我的情况下,我将服务称为htp://machinename:700 /test.svc但在客户端部分有带有 net.tcp 和 wshttp 配置的地址,删除了这些地址,问题已为我解决。

于 2013-12-03T20:32:07.607 回答
0

请右键单击您的 wcf 服务的 svc 文件,然后单击查看标记。

然后也在那里修改命名空间。那么它应该可以正常工作。

于 2012-07-07T05:45:34.950 回答
0

如果您的 web.config 中的所有内容似乎都是正确的,则此错误可能是由同一服务器上的另一个应用程序引起的。我花了几天时间来解决一个类似的问题。

在我的例子中,环境有大量的 WCF 服务作为 Web 应用程序部署在 IIS 中的单个网站下,如下所示。

/Root Website
    /Service1
    /Service2
    /Service3
    /ServiceX

其中一项子服务被错误地部署到根网站物理文件夹,而不是它自己的物理文件夹。这个糟糕的部署包含所有服务通用的客户端端点定义,并导致所有子服务中断。显然,父网站和子 Web 应用程序不能使用相同的客户端端点。

从根网站中删除客户端端点为我解决了这个问题。

于 2016-05-09T19:17:11.460 回答