WCF - найдено более одной конфигурации конечных точек для этого контракта - Ошибка
У нас работает веб-приложение ASP.Net с WCF. служба wcf, размещенная как служба Windows. Все хорошо. Затем мы внесли изменения, чтобы контракт на обслуживание имел другое пространство имен (From Namespace1.IserviceContract to 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 и пул приложений. Все еще получаю то же исключение.
Ответы
Ответ 1
Попробуйте выполнить поиск в web.config для другого, использующего веб-адрес в качестве вашего ManagementService. Кроме того, найдите web.config для любой ссылки на старое пространство имен (contract = "Namespace1.IserviceContract" ). Не забудьте проверить дополнительные файлы .config. Эта маленькая горта меня сожгла раньше.
Ответ 2
Независимо от того, какой протокол вызывается как basic, net.tcp или wshttp, этот адрес должен быть в файле веб-конфигурации удалять другие адреса из клиент в файле app.config, в моем случае я звоню служба htp://машинное имя: 700/test.svc, но в разделе клиента были адреса с конфигурациями net.tcp и wshttp, удалены эти адреса и проблема исправлена для меня.
Ответ 3
Щелкните правой кнопкой мыши файл svc вашего wcf-сервиса и нажмите "Просмотреть разметку".
тогда также измените пространство имен. Тогда он должен работать нормально.
Ответ 4
Если все в вашем web.config окажется правильным, эта ошибка может быть вызвана другим приложением на том же сервере. Я потратил несколько дней на устранение подобной проблемы.
В моем случае в среде было большое количество служб WCF, развернутых как веб-приложения в IIS под одним веб-сайтом следующим образом.
/Root Website
/Service1
/Service2
/Service3
/ServiceX
Одна из дочерних служб была ошибочно развернута в корневой папке корневого сайта, а не в собственной физической папке. Это плохое развертывание содержало определение конечной точки клиента, которое было общим для всех служб и приводило к разрыву всех дочерних служб. По-видимому, одна и та же конечная точка клиента не может использоваться родительским веб-сайтом и дочерним веб-приложением.
Удаление конечной точки клиента с корневого веб-сайта исправило проблему для меня.