我们使用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和应用程序池。仍然得到同样的例外。
答案 0 :(得分:23)
尝试在web.config中搜索使用Web地址作为ManagementService的其他人。另外,在web.config中搜索对旧命名空间的任何引用(contract =“Namespace1.IserviceContract”)。不要忘记检查额外的.config文件。那个小小的骗局以前把我烧了。
答案 1 :(得分:3)
无论调用什么协议,如basic,net.tcp或wshttp,该地址都应该在web配置文件中删除app.config文件中 client 部分的其他地址,在我的情况下,我正在调用该服务为 htp:// machinename:700 / test.svc ,但在客户端部分有net.tcp和wshttp配置的地址,删除了这些地址,问题对我来说是固定的。
答案 2 :(得分:0)
请右键单击wcf服务的svc文件,然后单击View markup。
然后修改名称空间。它应该工作正常。
答案 3 :(得分:0)
如果web.config中的所有内容都显示正确,则此错误可能是由同一服务器上的其他应用程序引起的。我花了几天时间来解决类似的问题。
就我而言,环境中有大量WCF服务作为Web应用程序部署在一个网站下的IIS中,如下所示。
/Root Website
/Service1
/Service2
/Service3
/ServiceX
其中一个子服务被错误地部署到根网站物理文件夹而不是它自己的物理文件夹。此错误部署包含一个客户端端点定义,该定义对所有服务都是通用的,并导致所有子服务中断。显然,父网站和子网络应用程序不能使用相同的客户端端点。
从root网站删除客户端端点为我解决了这个问题。