Web Services使用多态的方法

在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的时候有生成可序列化的代码时能够使用,要在其他的客户端使用还是得费一番周折。

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

(0)

相关推荐

  • asp.net下实现支持文件分块多点异步上传的 Web Services

    本文的客户端应用程序不包括 ASP.Net Web 应用程序! 本文假设 URL: http://localhost/mywebservices/updownload.asmx 共有 4 个程序文件 (Web.Config 就不赘述了) Server Side: 标题中所提到的 "异步" 其实在服务器端的程序并没有什么特殊的,而主要是通过客户端应用程序 异步调用相关 Web Method 实现的! 1. updownload.asmx ,位于 IIS 的某个 Web 共享目录,代码如下

  • Powershell中请求WebServices并以JSON格式输出结果

    适用于PS3.0及以后版本. 这里可以用JSON格式从网上得到大量的信息,下面例子演示如何将网上查到的结果转换成JSON对象. 这个例子使用了一个德国铁路公司的网站,你可以输入一个火车站的名字或城市,他将返回你想要去的类似所有车站名称. 复制代码 代码如下: # ask for part of the train station name $name = Read-Host 'Enter part of train station Name'   # query webservice $url

  • VS2008中使用JavaScript调用WebServices

    最近这几天任务完成了,也没什么重要的事情,抽空学习了一下WebServices的知识,感觉还是挺有意思,难度也不是很大. 首先,用VS2008创建一个asp.net网站 其次,项目 右键->添加新项->Web 服务   如下图: 就会产生WebService.cs和WebService.asmx两个文件 在WebService.cs中添加代码: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Lin

  • JQuery调用WebServices的方法和4个实例

    你甚至为每个ajax请求添加一个后端页面!你是不是甚至在想,尼玛,要是能够直接调用C#类文件中的方法就爽了?!(这里FishLi做了一个框架,有兴趣可以去看看)可是,你大概忘记了,我们是程序员,我们是懒惰的,我们要让电脑给我们干更多的事情!(这里装装13),但其实,微软和JQuery大牛们早帮我们解决了这个小问题. 大致的调用分为以下几种: 一.无参数 有返回值的调用 前端JS代码: 复制代码 代码如下: $("#btn1").click(function() {           

  • asp.net Web Services上传和下载文件(完整代码)第1/2页

    下面,我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器.一:通过Web Services显示和下载文件 我们这里建立的Web Services的名称为GetBinaryFile,提供两个公共方法:分别是GetImage()和GetImageType(),前者返回二进制文件字节数组,后者返回文件类型,其中,GetImage()方法有一个参数,用来在客户端选择要显示或下载的文件名字.这里我们所显示和下载的文件可以不在虚拟目录

  • Web Services使用多态的方法

    在Web Services方法中,往往使用的都是一个具体类型的参数,这个参数一般就是一个数据对象.ASP.NET Web Services通过声明XmlIncludeAttribute可以实现Web Services方法中运用多态. XmlIncludeAttribute允许XmlSerializer在序列化火反序列化对象时识别类型.当应用XmlIncludeAttribute时,需指定派生类的Type.XmlSerializer序列化同时包含基类和派生类的对象之后,它就可以识别两种对象类型.

  • 秒杀系统Web层设计的实现方法

    秒杀系统Web层设计的实现方法 一.Restful接口设计 使用资源+名词的方式来为url链接命名.例如: 访问详情页的链接可以是: seckill/{seckillId}/detail 二.SpringMVC配置 1.首先要在web.xml中配置中央控制器. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q

  • 将properties文件的配置设置为整个Web应用的全局变量实现方法

    四大作用域: Web应用中的变量存放在不同的jsp对象中,会有不一样的作用域,四种不同的作用域排序是 pageContext < request < session < application; 1.pageContext:页面域,仅当前页面有效,离开页面后,不论重定向还是转向(即无论是redirect还是forward),pageContext的属性值都失效: 2.request:请求域,在一次请求中有效,如果用forward转向,则下一次请求还可以保留上一次request中的属性值,

  • tomcat共享多个web应用会话的实现方法

    tomcat共享多个web应用会话的实现方法 问题 今天有位朋友问了个问题,大致是:tomcat下两个Java web,一个是商城,一个是直播,从商城登录后,再跳转到直播,发现处于非登录状态. 解决思路 将session抽出来成一个session服务,统一通过该服务操作session. tomcat内部用会话管理器获取会话时遍历所有context内的会话. 方案1 重写获取session方法即可. 方案2 找了源码发现已经支持类似遍历所有context内的会话的形式,首先获取session时,如

  • JavaScript取得WEB安全颜色列表的方法

    本文实例讲述了JavaScript取得WEB安全颜色列表的方法.分享给大家供大家参考.具体如下: web安全颜色指的是 护眼色, 能够让访问者的眼睛舒服的颜色 //JavaScript取得216种WEB安全色值 var n = 0; var hex = new Array('FF', 'CC', '99', '66', '33', '00'); function colorPanel(){ for (var i = 0; i < 6; i++) { for (var j = 0; j < 6;

  • C#获取web.config配置文件内容的方法

    本文实例讲述了C#获取web.config配置文件内容的方法.分享给大家供大家参考.具体实现方法如下: 1.ConfigurationManager提供对客户端应用程序配置文件的访问. 其有两个属性:ConnectionStrings 获取当前应用程序默认配置的 ConnectionStringsSection 数据. 方法一: 复制代码 代码如下: string myConn =System.Configuration.ConfigurationManager.ConnectionString

  • Java Web实现添加定时任务的方法示例

    本文实例讲述了Java Web实现添加定时任务的方法.分享给大家供大家参考,具体如下: 定时任务时间控制类 /** * 定时任务时间控制 * * @author liming * */ public class TimerManager { // 时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInsta

  • nginx 隐藏版本号与WEB服务器信息的解决方法

    nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看看最终的隐藏结果吧 具体怎么实现呢,其实也很简单,请往下看 1 官网下载最新稳定版 wget http://nginx.org/download/nginx-1.14.1.tar.gz 2 解压 tar -xf nginx-1.14.1.tar.gzcd nginx-1.14.1 3 修改C文件 (1)vim src/http/ngx_http_header_filter_module.c #修改49行 static u_char

随机推荐