zoukankan      html  css  js  c++  java
  • wcf KnownTypeAttribute 武胜

    KnownTypeAttribute与ServiceKnownTypeAttribute

    对于已知类型,可以通过两个特殊的自定义特性进行设置:KnownTypeAttribute和 ServiceKnownTypeAttribute。KnownTypeAttribute应用于数据契约中,用于设置继承与该数据契约类型的子数据契 约类型,或者引用的其他潜在的类型。ServiceKnownTypeAttribute既可以应用于服务契约的接口和方法上,也可以应用在服务实现的类 和方法上。应用的目标元素决定了定义的已知类型的作用范围。下面的代码中,在基类OrderBase指定了子类的类型Order。

     1: [DataContract]
     2: [KnownType(typeof(Order))]
     3: public abstract class OrderBase : IOrder
     4: {
     5: //省略成员
     6: }

    而ServiceKnownTypeAttribute特性,仅可以使用在服务契约类型上,也可以应用在服务契约的操作方法上。如果应用在服务契约 类型上,已知类型在所有实现了该契约的服务操作中有效,如果应用于服务契约的操作方法上,则定义的已知类型在所有实现了该契约的服务对应的操作中有效。

     1: [ServiceContract]
     2: [ServiceKnownType(typeof(Order))]
     3: public interface IOrderManager
     4: {
     5: [OperationContract]
     6: void ProcessOrder(OrderBase order);
     7: }
     1: [ServiceContract]
     2: public interface IOrderManager
     3: {
     4: [OperationContract]
     5: [ServiceKnownType(typeof(Order))]
     6: void ProcessOrder(OrderBase order);
     7: }

    ServiceKnownTypeAttribute也可以应用于具体的服务类型和方法上面。对于前者,通过ServiceKnownTypeAttribute定义的已知类型在整个服务的所有方法中有效,而对于后者,则已知类型仅限于当前方法。

     1: [ServiceKnownType(typeof(Order))]
     2: public class OrderManagerService : IOrderManager
     3: { 
     4: public void ProcessOrder(OrderBase order)
     5: {
     6: //省略成员
     7: }
     8: }
     1: public class OrderManagerService : IOrderManager
     2: {
     3: [ServiceKnownType(typeof(Order))]
     4: public void ProcessOrder(OrderBase order)
     5: {
     6: //省略成员
     7: }
     8: }

    除了通过自定义特性的方式设置已知类型外,已知类型还可以通过配置的方式进行指定。已知类型定义 在<system.runtime.serialization>配置节中,采用如下的定义方式。这和我们在上面通过 KnownTypeAttribute指定Order类型是完全等效的。

     1: <?xml version="1.0" encoding="utf-8" ?>
     2: <configuration>
     3: <system.runtime.serialization>
     4: <dataContractSerializer>
     5: <declaredTypes>
     6: <add type="Artech.DataContractSerializerDemos.OrderBase,Artech.DataContractSerializerDemos.KnownTypes">
     7: <knownType type="Artech.DataContractSerializerDemos.Order,Artech.DataContractSerializerDemos.KnownTypes"/>
     8: </add>
     9: </declaredTypes>
     10: </dataContractSerializer>
     11: </system.runtime.serialization>
  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/zeroone/p/2454785.html
Copyright © 2011-2022 走看看