У меня возникли проблемы с выяснением проблемы с сервисом WCF, который появился после того, как я применил к нему контракт «v2» для расширения функциональности. Все строит отлично, но когда я пытаюсь получить доступ к сервису в браузере, мне просто говорят, что он не может подключиться. Когда я пытаюсь добавить его в качестве ссылки на службу, я получаю аналогичное сообщение о проблемах с подключением. Однако, когда я удаляю конечную точку расширенного контракта из файла конфигурации и оставляю прежнюю версию «v1» неповрежденной, она работает нормально.Не удается получить доступ к сервису WCF после контрактов на обслуживание версий
Вот "v1" контракт:
namespace Company.Services.Ticketing.Retail.Contracts
{
[ServiceContract(Name = "OutletReportingContract_v1", Namespace = "https://enterprise.company.ie/Services/Retail")]
public interface IOutletReportingContract_v1
{
/* methods */
}
}
А вот "v2" контракт:
namespace Company.Services.Ticketing.Retail.Contracts
{
[ServiceContract(Name = "OutletReportingContract_v2", Namespace = "https://enterprise.company.ie/Services/Retail")]
public interface IOutletReportingContract_v2 : IOutletReportingContract_v1
{
/* methods */
}
}
Вот конечные точки в Web.config:
<service name="Company.Services.Ticketing.Retail.OutletService" behaviorConfiguration="Public">
<endpoint address="1" binding="wsHttpBinding" bindingConfiguration="Standard" name="OutletReportingContract_v1"
contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v1" />
<endpoint address="2" binding="wsHttpBinding" bindingConfiguration="Standard" name="OutletReportingContract_v2"
contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v2" />
<endpoint address="mex" binding="mexHttpsBinding" name="IMetadataExchange" contract="IMetadataExchange" />
</service>
И вот сообщение об ошибке, которое появляется в средстве просмотра событий:
WebHost не смог обработать запрос. Информация об отправителе: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/28075619 Исключение: System.Web.HttpException (0x80004005): Канал активно не прослушивался в 'https://phil-pc.company.local/Services/Retail/OutletService.svc/_vti_bin/ListData.svc/ $ метаданных'. Это часто вызвано неправильным адресом URI. Убедитесь, что адрес, на который отправлено сообщение, соответствует адресу, по которому прослушивается служба. ---> System.ServiceModel.EndpointNotFoundException: не было канала, активно слушающего в 'https://phil-pc.company.local/Services/Retail/OutletService.svc/_vti_bin/ListData.svc/ $ метаданных'. Это часто вызвано неправильным адресом URI. Убедитесь, что адрес, на который отправлено сообщение, соответствует адресу, по которому прослушивается служба. в System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived (результат HostedHttpRequestAsyncResult) на System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() в System.Runtime.AsyncResult.End [TAsyncResult] (IAsyncResult результат) на System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End (IAsyncResult результат) Имя процесса: w3wp Идентификатор процесса: 8148
немного в тупик сейчас и оценил бы любую помощь :)
Эй, спасибо за Ваш ответ! Я действительно забыл добавить факт, что контракт v2 наследуется от контракта v1, я обновляю свой пост, чтобы отразить это. Что касается вашего решения, то дело в том, что формат, который я использовал в своем сообщении, отлично подходит для другой службы, и нет очевидных различий в реализации. – achillesminor