zoukankan      html  css  js  c++  java
  • 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

          最后一种方式是直接在配置文件里进行配置,因为是全局的与第一种一样。所以就不在此讲述了。



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    杨辉三角形II(Pascal's Triangle II)
    easyUI DataGrid 分页
    var, object, dynamic的区别以及dynamic的使用
    如何防止程序多次运行
    HTTP报文
    值类型,引用类型,栈,堆,ref,out
    Robotlegs框架1.5简介
    TOGAF架构内容框架之内容元模型(下)
    ZOJ 1204 一个集合能组成多少个等式
    画透明位图
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4734661.html
Copyright © 2011-2022 走看看