c#强制转换子类SOAP

时间:2018-10-11 08:28:19

标签: c# soap casting parent-child

我有一个带有方法“ GetCustomer”的肥皂接口,该方法返回一个customerDto。我想为具有更多信息的另一个客户端创建一个新的接口方法,因此我创建了第二个方法“ GetCustomerExtended”,该方法返回一个以客户对象为父对象的customerExtendedDto。 为了重用我的代码,我将孩子强制转换为父母,但似乎不起作用。肥皂不返回任何信息。这是我的代码:

肥皂类:

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日志显示: 2018年10月11日星期四11:29:42 CEST 2018:ERROR:请求中的异常:java.net.SocketException:连接重置 2018年10月11日星期四11:29:42 CEST:错误:发生错误[连接重置],有关详细信息,请参见错误日志 周四10月11日11:29:42 CEST 2018:INFO:获取[BasicHttpBinding_IShopService.GetCustomer:Request 1]响应时出错; java.net.SocketException:连接重置

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,虽然不是很好,但是可以工作:

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

        return customer;
    }

我认为问题在于,该对象仍然是“ CustomerExtended”对象。这是通过引用调用的,我将customerextended xml返回到soap UI(或者可能是混合的)。使用自动映射器,我创建了一个CustomerDto,它工作正常。

但是我仍然很高兴为这个问题提供更好的解决方案。