代码之家  ›  专栏  ›  技术社区  ›  leepowers

webservice复杂类型与类继承

  •  2
  • leepowers  · 技术社区  · 16 年前

    使用以下将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_客户端参数的以下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>
    

    因此,.net web service似乎没有将继承的属性视为web服务的参数/变量。如何使.NET也使用基类的属性?

    1 回复  |  直到 16 年前
        1
  •  2
  •   John Saunders    16 年前

    您如何确定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>
    
    推荐文章