首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#强制转换子类SOAP

c#强制转换子类SOAP
EN

Stack Overflow用户
提问于 2018-10-11 16:28:19
回答 1查看 127关注 0票数 0

我有一个带方法"GetCustomer“的soap接口,它返回一个customerDto。我想为另一个具有更多信息的客户机创建一个新的接口方法,因此我创建了第二个方法“GetCustomerExtended”,它返回一个以customer对象为父对象的customerExtendedDto。为了重用我的代码,我将子代转换为父代,但它似乎不起作用。soap不返回任何信息。下面是我的代码:

soap类:

代码语言:javascript
复制
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:

代码语言:javascript
复制
[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“中填写客户信息,它可以工作:

代码语言:javascript
复制
public CustomerDto GetCustomer(int id)
{
    // Fill result
    CustomerDto result = new CustomerDto();
    result.Id = 1;
    result.Name = "foo";

    return result;
}

这里有什么问题?我怎样才能正确地在这里进行造型呢?

SoapUI日志为:清华Oct 11 11:29:42 CEST 2018: error : request: java.net.SocketException:连接重置清华Oct 11 11:29:42 CEST 2018: error :连接重置参见错误日志详细信息清华Oct 11 11:29:42 CEST 2018:INFO:获取BasicHttpBinding_IShopService.GetCustomer:Request 1响应错误;java.net.SocketException:连接重置

EN

回答 1

Stack Overflow用户

发布于 2018-10-11 18:48:51

我找到了一个解决方案,虽然不是很好,但很管用:

代码语言:javascript
复制
    public CustomerDto GetCustomer(int id)
    {
        CustomerDto customer = Mapper.Map<CustomerExtendedDto, CustomerDto>(GetCustomerExtended(id));

        return customer;
    }

我认为问题在于,该对象仍然是一个"CustomerExtended“对象。它是通过引用调用的,我将customerextended xml返回给soap (或者可能是混合的)。使用automapper,我创建了一个CustomerDto,它工作得很好。

但我仍然很高兴这个问题有了更好的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52755564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档