欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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使用多态的方法

查看引用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可以支持多态,不过仅仅限制在可以直接引用web services的时候有生成可序列化的代码时能够使用,要在其他的客户端使用还是得费一番周折。

以上就是本文的全部内容,希望对大家的学习有所帮助。

上一篇:

下一篇: