Different ways of associating known types in wcf
解释一下这个博客Known Types此属性标签,假设翻译的单词,所谓已知类型它。在服务契约中实现多态的行为。有四种方式实现,以下来分别演示一下。
1.User KnownType attribute on the base type.
这样的方式是针对于全局的。假设採用这样的方式后,全局的服务契约和全部的方法契约将都会默认加上此种方式。
员工类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace EmployeeService
{
[KnownType(typeof(FullTimeEmployee))]
[DataContract(Namespace="http://Employee/employee")]
public class Employee
{
private int _id;
private string _name;
private string _gender;
private DateTime _dateOfBirth; [DataMember(Name="id",Order=1)]
public int ID
{
get { return _id; }
set { _id = value; }
} [DataMember(Name = "Name", Order = 2)]
public string Name
{
get { return _name; }
set { _name = value; }
} [DataMember(Name = "Gender", Order = 2)]
public string Gender
{
get { return _gender; }
set { _gender = value; }
} public DateTime DateOfBirth
{
set { _dateOfBirth = value; }
get { return _dateOfBirth; }
} }
}
全职员工类。继承自基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace EmployeeService
{
[DataContract]
public class FullTimeEmployee:Employee
{
public int AnnualSalary { set; get; }
}
}
上述中FullTimeEmployee继承自Employee,此时假设在Employee上增加 [KnownType(typeof(FullTimeEmployee))]标签后,client也就会看到FullTimeEmployee
2.Apply ServiceKnownType attribute on the service contract.
另外一种方式是,直接把此标签加入到服务契约上,那么此时。仅仅有此服务契约共享该契约实体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace EmployeeService
{
// 注意: 使用“重构”菜单上的“重命名”命令,能够同一时候更改代码和配置文件里的接口名“IEmployeeService”。
[ServiceKnownType(typeof(FullTimeEmployee))]
[ServiceContract]
public interface IEmployeeService
{
[OperationContract]
Employee GetEmployee(int Id); [OperationContract]
void SaveEmployee(Employee Employee);
}
}
3. Apply ServiceKnownType attribute on specific operation contracts.
此种方式是把已知类型加入到服务契约的方法上,那么结果可想而知,仅仅有该服务契约的某个方法上才干够共享契约对象。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace EmployeeService
{
// 注意: 使用“重构”菜单上的“重命名”命令。能够同一时候更改代码和配置文件里的接口名“IEmployeeService”。 [ServiceContract]
public interface IEmployeeService
{
[ServiceKnownType(typeof(FullTimeEmployee))]
[OperationContract]
Employee GetEmployee(int Id); [OperationContract]
void SaveEmployee(Employee Employee);
}
}
4.Specifiy known types in the configuration file
最后一种方式是直接在配置文件里进行配置,因为是全局的与第一种一样。所以就不在此讲述了。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Different ways of associating known types in wcf的更多相关文章
- WCF入门(8)
前言 昨天买的usb无线路由到了,笔记本又可以愉快的上网了. 下午去办市民卡,被告知说“本人医保现在停保,要等继续缴才行”,白公交坐了那么远的路. 需要视频的进群,378190436. 第八集 Dif ...
- Three ways to do WCF instance management
Three ways to do WCF instance management (Per call, Per session, and Single). IntroductionVery often ...
- WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and Introduc ...
- WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】
WCF Interview Questions – Part 4 This WCF service tutorial is part-4 in series of WCF Interview Qu ...
- (WCF) 多线程 (Multi-threading) 和 并发性 (Concurency)
问题:WCF 有个Server端,还有个Client端,他们之间是如何进行并发,多线程通信的呢?多个Client端同时访问Server,如何保证Server端的操作线程安全呢? 在理解WCF Conc ...
- how to do error handing with WCF by using attributes to log your errors z
There are multiple ways to do error handling in WCF as listed by Pedram Rezaei Blog. The default way ...
- Java Interview Reference Guide--reference
Part 1 http://techmytalk.com/2014/01/24/java-interview-reference-guide-part-1/ Posted on January 24, ...
- 栈帧 2.6. Frames 虚拟机内存模型
https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-2.html#jvms-2.6 小结: 1. https://docs.oracle. ...
- 可扩展的Web系统和分布式系统(Scalable Web Architecture and Distributed Systems)
Open source software has become a fundamental building block for some of the biggest websites. And a ...
随机推荐
- 利用Javamail接收QQ邮箱和Gmail邮箱(转)
求大神解答 Java代码: public class SendMailController { //@Autowired private JavaMailSenderImpl mailSender; ...
- 可兼容IE的jquery.cookie函数方法
前言 在开发过程中,因为之前有接触过Discuz,就直接拿其common.js里面的getcookie和setcookie方法来使用,做到后面在使用IE来测试的时候,发现这两个方法子啊IE下不起作用, ...
- 王立平--Failed to push selection: Read-only file system
往android模拟器导入资源,失败. 提示:仅仅读文件. mnt是仅仅读文件.应点击sdcard.,在导入
- 在Button上、下、左、右位置加入图片和文字
转载请注明出处:http://blog.csdn.net/droyon/article/details/37564419 非常多人有如标题所述的需求,并且大多数人採用了自己定义组件攻克了需求,事实上还 ...
- hdu5338 (二进制,双指针)
这种双循环的优化问题碰到过很多了.层出不穷. 但无非就是要利用前面循环时,所产生的信息,从而减少计算. 可以注意到log其实是不超过40的, 那么以这方面入手,时间复杂度就可以降为nlogn log= ...
- Preview of Spring-framework :Spring框架的预习和自我整理
Spring简介 - 预习的自我整理 1. What's Spring? Spring是一个从实际开发中抽取出来的框架,完成了大量开发中的通用步骤,留给开发者仅仅是与特定应用相关的部分,从而提高了企业 ...
- 通过action 跨进程启动activity
在一些场景中我们需要从一个进程启动另外的一个应用的activity,这有什么好办法? 这里介绍一种方法,通过自定义 action 通过filter来启动. 如果你需要启动一个你自己写的另一个app的a ...
- [Cocos2d-x v3.x]浅谈容器Vector
转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...
- <a href='javascript:void(0)' onclick='my()'></a>
- Java 的布局管理器GridBagLayout的使用方法(转)
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...