Web Services使用多态的方法
程序员文章站
2023-12-19 13:07:34
在web services方法中,往往使用的都是一个具体类型的参数,这个参数一般就是一个数据对象。asp.net web services通过声明xmlincludeatt...
在web services方法中,往往使用的都是一个具体类型的参数,这个参数一般就是一个数据对象。asp.net web services通过声明xmlincludeattribute可以实现web services方法中运用多态。
xmlincludeattribute允许xmlserializer在序列化火反序列化对象时识别类型。当应用xmlincludeattribute时,需指定派生类的type。xmlserializer序列化同时包含基类和派生类的对象之后,它就可以识别两种对象类型。
首先定义基类vehicle和派生类car:
public abstract class vehicle { public string licensenumber{get;set;} public datetime maketime { get; set; } } public class car : vehicle { public int doornum { get; set; } }
定义addvehicle的web method,声明xmlinclude需要添加对命名空间system.xml.serialization的引用:
[webmethod] [xmlinclude(typeof(car))] public void addvehicle(vehicle vehicle) { }
查看生成的wsdl,wsdl利用extension的base属性来描述car继承vechicle。
查看引用web services生成的reference.cs文件,vehicle类会有xmlincludeattribute的声明:
[system.xml.serialization.xmlincludeattribute(typeof(car))] [system.codedom.compiler.generatedcodeattribute("system.xml", "4.0.30319.1")] [system.serializableattribute()] [system.diagnostics.debuggerstepthroughattribute()] [system.componentmodel.designercategoryattribute("code")] [system.xml.serialization.xmltypeattribute(namespace="http://tempuri.org/")] public abstract partial class vehicle : object
客户端测试代码:
static void main(string[] args) { localhost.webservice1soapclient c = new localhost.webservice1soapclient(); localhost.car car = new localhost.car() { licensenumber="0001", maketime=datetime.now, doornum=2 c.addvehicle(car); }
在web services的addvehicle方法可以查看传过来的参数:
web services可以支持多态,不过仅仅限制在可以直接引用web services的时候有生成可序列化的代码时能够使用,要在其他的客户端使用还是得费一番周折。
以上就是本文的全部内容,希望对大家的学习有所帮助。