Webservice复杂类型和类继承

时间:2010-03-13 00:53:34

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

使用aClientArgs作为复杂类型使用以下Webservice定义:

[System.Web.Script.Services.ScriptService]
public class Controller : System.Web.Services.WebService {
    [WebMethod]
    public void save_client(aClientArgs client)
    {
           // Save client data
    }
}

然后将aClientArgs定义为子类:

public class aArgs 
{
    public string id = null;
    public string name = null;
}

public class aClientArgs : aArgs
{
    public string address = null;
    public string website = null;
}

返回save_client args的以下WSDL片段:

<save_client xmlns="http://tempuri.org/">
  <client>
    <address>string</address>
    <website>string</website>
  </client>
</save_client>

当我期待以下内容时:

<save_client xmlns="http://tempuri.org/">
  <client>
    <id>string</id>
    <name>string</name>
    <address>string</address>
    <website>string</website>
  </client>
</save_client>

因此,对于Web服务而言,.NET WebService似乎并未将继承的属性视为参数/变量。如何让.NET也使用基类的属性?

1 个答案:

答案 0 :(得分:2)

您是如何确定WSDL错误的?您是否浏览了该服务并单击save_client方法的链接?

这只是一个帮助页面。在这种情况下,这是错误的。单击服务描述的链接,我认为您将看到以下内容:

  <s:complexType name="aClientArgs">
    <s:complexContent mixed="false">
      <s:extension base="tns:aArgs">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="Address" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" name="Website" type="s:string" />
        </s:sequence>
      </s:extension>
    </s:complexContent>
  </s:complexType>
  <s:complexType name="aArgs">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="ID" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
    </s:sequence>
  </s:complexType>