簡體   English   中英

C#強制轉換子類SOAP

[英]c# casting child class SOAP

我有一個帶有方法“ 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日志說:Thu Oct 11 11:29:42 CEST 2018:ERROR:請求中的異常:java.net.SocketException:連接重置Thu Oct 11 11:29:42 CEST 2018:ERROR:發生錯誤[連接重置] ,請參閱錯誤日志以獲取詳細信息。Thu Oct 11 11:29:42 CEST 2018:INFO:獲取[BasicHttpBinding_IShopService.GetCustomer:Request 1]響應時出錯; java.net.SocketException:連接重置

我找到了一個解決方案,雖然不是很好,但可以:

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

        return customer;
    }

我認為問題在於,該對象仍然是“ CustomerExtended”對象。 這是通過引用調用的,我將customerextended xml返回到soap UI(或者可能是混合的)。 使用自動映射器,我創建了一個CustomerDto,並且運行良好。

但是我仍然很高興為這個問題提供更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM