wcf - как обрабатывать сервис с несколькими конечными точками, которые совместно используют одно и то же действие - PullRequest
0 голосов
/ 15 апреля 2019

я получаю следующую ошибку при попытке запустить мой сервис:

Could not start the Service: System.InvalidOperationException: This service has multiple endpoints listening at 'https://b2e.my.loc:8093/' which share the same initiating action 'http://localhost:8080/kestrel/AirService'.  As a result, messages with this action would be dropped since the dispatcher would not be able to determine the correct endpoint for handling the message.  Please consider hosting these Endpoints at separate ListenUris.

Мы получили приложение, которое использует сторонний WSDL для поиска и бронирования рейса.

иу нас есть другое приложение winform, которое берет сгенерированный reference.cs из вышеприведенного wsdl

. Идея состоит в том, чтобы создать «симулятор», поэтому вместо вызова реального WSDL мы фактически вызываем сам симулятор и генерируем данные, которые мынужно (что-то вроде насмешки)

рассмотрим следующий файл reference.cs, сгенерированный WSDL:

namespace FlightWCF
{
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace = "", ConfigurationName = "FlightWCF.ISearch")]
    public interface ISearch
    {
        [System.ServiceModel.OperationContractAttribute(Action = "http://localhost:8080/kestrel/AirService", ReplyAction = "*")]
        FlightWCF.serviceResponse1 service(FlightWCF.serviceRequest1 request);
    }


    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
    [System.ServiceModel.ServiceContractAttribute(Namespace = "", ConfigurationName = "FlightWCF.IReserve")]
    public interface IReserve
    {
        [System.ServiceModel.OperationContractAttribute(Action = "http://localhost:8080/kestrel/AirService", ReplyAction = "*")]
        FlightWCF.serviceResponse6 service(FlightWCF.serviceRequest6 request);
    }   
}

это часть моего app.config

<service name="MyFlightClass.ServiceFlight">
    <endpoint address="" binding="basicHttpBinding"  bindingConfiguration="basicSecureHttpBindingConfiguration" contract="FlightWCF.ISearch" />
    <endpoint address="" binding="basicHttpBinding"  bindingConfiguration="basicSecureHttpBindingConfiguration" contract="FlightWCF.IReserve" />
</service>

и это служба, использующая приведенный выше код:

namespace MyFlightClass
{

    class  ServiceFlight :  ISearch, IReserve
    {
        public FlightWCF.serviceResponse1 service(FlightWCF.serviceRequest1 request)
        {
            //DO SOMETHING
        }

        public FlightWCF.serviceResponse6 service(FlightWCF.serviceRequest6 request)
        {
            //DO SOMETHING
        }
    }
}

проблема в том, что обе службы используют одно и то же «действие».

, если я изменяю «действие» одного, еслиих становится недоступным.

и я не могу найти никаких данных о том, как настроить службу с 2 конечными точками, которые имеют разные контракты, но с тем же действием.

предложение "Пожалуйста,Мне неясно, размещать ли эти конечные точки в отдельном ListenUris.

1 Ответ

0 голосов
/ 16 апреля 2019

Основная проблема заключается в том, что адрес конечной точки двойного обслуживания не должен быть одинаковым. У предоставленной вами конфигурации такой же Uri прослушивания.

<service name="MyFlightClass.ServiceFlight">
    <endpoint address="" binding="basicHttpBinding"  bindingConfiguration="basicSecureHttpBindingConfiguration" contract="FlightWCF.ISearch" />
    <endpoint address="" binding="basicHttpBinding"  bindingConfiguration="basicSecureHttpBindingConfiguration" contract="FlightWCF.IReserve" />
</service>

Таким образом, это приводит к тому, что операция имеет то же пространство имен, так как имя операции дублируется. Но сообщение SOAP отправляется в нужную конечную точку в зависимости от пространства имен операции мыла.
Короче говоря, нам придется изменить адрес конечной точки службы в конфигурации. Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...