c # приведение дочернего класса SOAP - PullRequest
0 голосов
/ 11 октября 2018

У меня есть интерфейс мыла с методом «GetCustomer», который возвращает customerDto.Я хотел создать новый метод интерфейса для другого клиента с большим количеством информации, поэтому я создал второй метод «GetCustomerExtended», который возвращает customerExtendedDto с объектом customer в качестве родителя.Чтобы повторно использовать мой код, я привел дочерний элемент к родительскому, но, похоже, он не работает.Мыло не возвращает никакой информации.Вот мой код:

класс мыла:

public class ShopService : IShopService
{
    public CustomerDto GetCustomer(int id)
    {
        return GetCustomerExtended(id);
    }

    public CustomerExtendedDto GetCustomerExtended(int id)
    {
        // Fill result
        CustomerExtendedDto result = new CustomerExtendedDto();
        result.Id = 1;
        result.Name = "foo";
        result.Surname = "bar";

        return result;
    }
}

[ServiceContract]
public interface IShopService
{
        [OperationContract]
        [FaultContract(typeof(InvalidParameterFaultMessage))]
        [FaultContract(typeof(DataNotFoundFaultMessage))]
        [FaultContract(typeof(InvalidOperationFaultMessage))]
        [FaultContract(typeof(ApplicationLogicFaultMessage))]
        [FaultContract(typeof(NotAvailableFaultMessage))]
        [FaultContract(typeof(TimeoutFaultMessage))]
        CustomerDto GetCustomer(int id);

        [OperationContract]
        [FaultContract(typeof(InvalidParameterFaultMessage))]
        [FaultContract(typeof(DataNotFoundFaultMessage))]
        [FaultContract(typeof(InvalidOperationFaultMessage))]
        [FaultContract(typeof(ApplicationLogicFaultMessage))]
        [FaultContract(typeof(NotAvailableFaultMessage))]
        [FaultContract(typeof(TimeoutFaultMessage))]
        CustomerExtendedDto GetCustomerExtended(int id);
}

Dto:

[DataContract]
public class CustomerDto
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

[DataContract]
public class CustomerExtendedDto : CustomerDto
{
    [DataMember]
    public strint Surname{ get; set; }
}

Метод работает, и он не вызывает никаких затрат, но ответвсегда пустоGetCustomerExtended работает отлично, GetCustomer пуст.SOAP UI, кажется, не получает никакой информации.Если я заполняю информацию о клиенте в «GetCustomer» следующим образом, она работает:

public CustomerDto GetCustomer(int id)
{
    // Fill result
    CustomerDto result = new CustomerDto();
    result.Id = 1;
    result.Name = "foo";

    return result;
}

В чем здесь проблема?Как я могу привести это здесь правильно?

В журнале SoapUI написано: Четверг 11 11:29:42 CEST 2018: ОШИБКА: Исключение в запросе: java.net.SocketException: Сброс соединения Чт 11 октября 11:29:42 CEST 2018: ОШИБКА: произошла ошибка [Сброс подключения], подробности см. В журнале ошибок. Четверг, 11 11:29:42 CEST 2018: ИНФОРМАЦИЯ: Ошибка при получении ответа для [BasicHttpBinding_IShopService.GetCustomer: Request 1];java.net.SocketException: сброс соединения

1 Ответ

0 голосов
/ 11 октября 2018

Я нашел решение, которое не очень хорошо, но работает:

    public CustomerDto GetCustomer(int id)
    {
        CustomerDto customer = Mapper.Map<CustomerExtendedDto, CustomerDto>(GetCustomerExtended(id));

        return customer;
    }

Я думаю, проблема в том, что объект все еще является объектом "CustomerExtended".Это вызов по ссылке, и я возвращаю привычный расширенный XML обратно к мыльному интерфейсу (или, может быть, к смеси).С помощью Autopper я создаю CustomerDto, и он отлично работает.

Но я все еще рад за лучшее решение этой проблемы.

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