ASMX webservice不会返回任何结果

时间:2012-03-26 10:29:46

标签: c# asp.net web-services asmx

我正在尝试通过在.net 4.0上运行的asmx webservice发送自定义类的对象,但我得到的只是一个空响应。见下文:

<soap:Body>
    <ActivateResponse xmlns="http://tempuri.org/">
      <ActivateResult />                               <!-- why is this empty -->
    </ActivateResponse>
</soap:Body>

但是,如果我修改我的方法并将返回类型更改为例如从 A 类到 B ,那么它将返回对象 B <的所有属性/ em>正确。见下文:

<ActivateResponse xmlns="http://tempuri.org/">
   <ActivateResult>
      <BtAddress>string</BtAddress>
      <Name>string</Name>
      <Number>string</Number>
   </ActivateResult>
</ActivateResponse>

我想知道它为什么会发生?我可以归咎于 A 类的序列化,但是我没有想到我的类文件。两个类文件在内容方面几乎相似,并且不包含任何Serialize属性。

那么,为什么webservice返回一种类型,而不是另一种类型呢?


A类

public class A
{
    private string code;
    private bool isValid;
    private int maxUniqueActivations;
    private DateTime dateAdded;
    private Customer customer = null;
    private bool _initAsEmpty = false;


    public License()
    {
        _initAsEmpty = true;
    }

    public string LicenseCode
    {
        get { return code; }
        //set { code = String.IsNullOrWhiteSpace(value)? null : value.Trim(); }
    }
    //If i change return type to Customer, it works too
    //so i dont think it should be blamed
    public Customer Customer
    {
        get { return customer; }
    }
    public bool IsValid
    {
        get { return isValid; }
    }
    public int MaxUniqueActivations
    {
        get { return maxUniqueActivations; }
    }
    public DateTime DateAdded
    {
        get { return dateAdded; }
    }
}

B类

public class Phone
{
    private string btAddress, name, number;
    private bool isValid;
    private DateTime dateAdded;
    private bool _initAsEmtpy = false;

    public Phone()
    {
        _initAsEmtpy = true;
    }

    public string BtAddress
    {
        get { return btAddress; }
        set { btAddress = string.IsNullOrWhiteSpace(value) ? null : value.Replace(":", "").Trim(); }
    }
    public string Name
    {
        get { return name; }
        set { name = string.IsNullOrWhiteSpace(value) ? null : value.Trim(); }
    }
    public string Number
    {
        get { return number; }
        set { number = string.IsNullOrWhiteSpace(value) ? null : value.Trim(); }
    }
    public bool IsValid
    {
        get { return isValid; }
    }
    public DateTime DateAdded
    {
        get { return dateAdded; }
    }
}

某些方法被抑制

2 个答案:

答案 0 :(得分:2)

为了可序列化,类必须在其属性上具有公共setter。这是A类和B类之间的差异,以及A不会序列化的原因。

可能:)

答案 1 :(得分:0)

我认为问题可能出在Customer类。也许它是私人或其他东西。试一试。